1

この形:

<%= form_tag({:controller => "smart_lists", :action => "create"}, class: 'form-inline', :method => "POST") do %>
<%= label_tag :name %>
<%= text_field_tag :name %><br><br>
  <% @people.each do |person| %>
    <%= check_box_tag 'people_id[]', id: person.id %><%= label_tag person.name %><br>
  <% end %>
<%= submit_tag "Create", class: 'btn' %>

ここで、チェック ボックス リストをコントローラに送信します。

def create
  @smart_list = SmartList.new(params[:smart_list])
  @smart_list.name = params[:name]
  @smart_list.people = params[:people_id]
 etc....

そして、ログに次のように記録されます。

"name"=>"This is not working : (", "people_id"=>["{:id=>64}", "{:id=>8}", "{:id=>1}"]

そして、これは私の見解では:

Person(#70133507313700) expected, got String(#70133469090180)

だから、私の質問は-それらの文字列からそのものを壊す方法はありますか? または、より良い方法でフォームから送信できますか? または、コントローラーでより良い方法でそれらをキャッチしますか?

助けてくれてありがとう - ジョーイ

4

1 に答える 1

0

フォームの check_box_tag を次のように変更しました。

<td><%= check_box_tag 'people[]', person.id %></td>

これにより、私のパラメーターで次のようなものが得られました。

"people"=>["67", "11", "10", "23", "3", "1"],    

そして、コントローラーで :people パラメーターをループして、ID を取り出しました。

if params[:people]
  params[:people].each do |p|
    @smart_list.people << Person.where(id: p)
  end
end 

これはかなり醜い気がしますが、うまくいきます。ビューまたはコントローラーを形成するためのより良い方法を誰かが持っている場合でも、これを行うためのより良い方法を知りたいです。- ありがとう

于 2012-09-18T17:02:03.490 に答える