0

フォームにドロップダウン選択を作成しようとしています。HABTM関連のドロップダウン選択

教室モデル:

class Classroom < ApplicationRecord 
    has_and_belongs_to_many :professors 
end 

教授モデル:

class Professor < ApplicationRecord 
    has_and_belongs_to_many :classrooms 
end 

強いPARAMS:私は教授と教室の間にHABTM関連を持っている私が見つけることを試みている

def classroom_params 
    params.require(:classroom).permit(:name, :professor_ids => []) 
end 

フォーム内にselect_tagの代わりにf.selectを使用する方法。しかし、私がそれをすると、データベースは値を保存しません。

<%= form_for @classroom do |f| %> 
    <%= f.label :name %><br> 
    <%= f.text_field :name %><br> 
    <% array = Professor.all.map { |professor| [professor.user.name, professor.id] } %> 
    <%= select_tag "classroom[professor_ids][]", options_for_select(array) %> 
<% end %> 

をしかし、私はそのようにしようとしていますし、それが動作していない:この方法では動作します

<%= form_for @classroom do |f| %> 
    <%= f.label :name %><br> 
    <%= f.text_field :name %><br> 
    <% array = Professor.all.map { |professor| [professor.user.name, professor.id] } %> 
    <%= f.select :professor_ids, options_for_select(array) %> 
<% end %> 

ビューが正常に動作しますが、私は、フォームを送信すると、値がに行きませんclassroom_params。私が提出した後、コントローラを停止することをデバッグしようとしたと、私はこれを得た:

enter image description here

のparamsは、提出されたすべての情報を正しく来たが、classroom_paramsはprofessor_idsが不足して来ました。 f.selectを使用してこのプルダウンを行う方法はありますか?

+1

コントローラーで 'cfg 'とは何ですか?コントローラコードを添付してください。 –

+0

それは私がそれを止めて、プロンプトでparamsを見るために書いたものです。 –

答えて

1

あなたは 'professor_ids'の配列をホワイトリストに入れましたが、あなたの 'select'入力は1文字列("prefessor_ids" => "2"あなたからのスクリーンショット)を返します。多分選択を「複数」として設定したいのですか? (私はそれをテストしていませんが、私はのparamsはその後、正しくホワイトリストに登録することになると思う)

<%= form_for @classroom do |f| %> 
    <%= f.label :name %><br> 
    <%= f.text_field :name %><br> 
    <%= s.collection_select :professor_ids, Professor.all, :id, :name, multiple: true %> 
<% end %> 

どこ

class Professor 
    ... 
    delegate :name, to: :user 
end 

更新あなたはおそらくありません

「CFGあなたのコントローラのアクションの変数。

+0

cfgはそれを停止し、プロンプトでパラメータを取得するだけです。この方法ではまだ動作しません。それはdbテーブルに教授値を保存していない。 –

+0

もちろん、それはあなたがそれを持っていたままにしておきます。単に '複数の'パラメータを追加してください: 'f.select:professor_ids、options_for_select(array)、{}、multiple:true' –

関連する問題