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 回答