2016-02-03 6 views
5

フェニックスフレームワークのフォームでは、私のページに、belongs_toの値をnilに設定するオプションがある選択ボックスがあります。Phoenix Frameworkフォームで、changesetを使用してbelongs_to関係をnullに戻すにはどうすればよいですか?

<%= select f, :relation_id, 
    Enum.into(Enum.map(@relations, fn p -> {p.name, p.id} end), 
    [{"None", nil}]) %> 

形態は、通常IDを送信しますが、ゼロ値が選択された場合、それは空の文字列として値を渡し:私はチェンジが無効であることエクトからエラーを受信

"relation_id" => "" 

それは整数を期待しているからです。おそらくマップを傍受し、値をnullに設定し、更新されたマップをチェンジセットに渡すことができます。しかし、これを行う簡単な方法はありますか?

+0

コントローラの 'relations'フィールドをどのようにプリロードしますか?チェンジセットでそれを行う方法の例が見つかりません。ありがとう – Paco

+0

ああ - selectはタプルの基本リストを期待していますが、好きなように生成することができます。この場合、@relationsはRepo.all:relations = Repo.all(relations_query)を使用した単純なプルであり、次にrenderコマンドのビューに渡されました。 –

答えて

5

私はプラグscrub paramsを使うべきだと思います。

は、コントローラに追加してください:

defmodule MyApp.SomeThingController do 
    use MyApp.Web, :controller 

    plug :scrub_params, "some_thing" when action in [:create, :update] 

    # def .... 
end 

それはnil値に""(空)の値に変換されます。

希望します。

関連する問題