2016-10-19 14 views
0

私は送信時にデータベースに新しいレコードを作成するフォームを持っています。私はデータベースにvalue_1 & value_2という2つの値を持っています。フォームには、yesとnoのドロップダウン値であるvalue_1の入力フィールドがあります。フォームが送信されたら、value_1とvalue_2をvalue_1の入力フィールドで選択した値に設定します。したがって、value_1のドロップダウンがyesに設定されている場合、value_2もyesに設定されます。2つのデータベース値を設定する1つのフォーム入力

私は現在、以下を使用しますが、よりエレガントな解決策が存在しなければならないと信じています:

params[:person][:free] = params[:person][:trial] 
@person = Person.new(params[:person]) 
@person.update_attribute(:free, params[:person][:free]) 
+0

params [:person] [:free]の値を変更した後にPersonを作成しているので、最後の行は必要ありません。 @personを保存するだけで済みます。 – Sajan

+0

奇妙なことに私は同じだと思いましたが、アップデートを追加しなければならなかったので、このアップデートを追加しなければなりませんでした。 '@ person.update_attribute(:free、params [:person] [:trial])' 'Person.new'に反映されていない場合、' params [:person] [:free] 'に値を代入してください。 – EamonnMcElroy

+0

' p params [:person] 'を最初の行の後に置いて、表示されていますか? – Sajan

答えて

0

まずあなたが本当に欲しいものを考える必要があります。あなたの論理は何ですか? value_2を常にvalue_1と同じにしますか?このケースでは、データベースの2番目の列は絶対に必要ないからです。 value_2をvalue_1と同じにして、新しいレコードを作成するだけですが、後でそのレコードを編集できるようにしますか?この場合、あなたは、コールバックを使用してモデルにロジックを置く必要があります。

モデルに追加します。

before_create :set_value_2 

private 

def set_value_2 
    self.value_2 = value_1 
end 

をあなたは誰がモデル自体外のメソッドにアクセスする必要はありませんので、プライベートな文であります。

関連する問題