此表格:
<%= 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)
所以,我想我的问题是 - 有没有办法打破那些字符串中的东西?或者我可以通过更好的方式通过表单发送它们吗?或者在控制器中捕获它们更好的方法?
感谢您的帮助 - 乔伊
答案 0 :(得分:0)
我最终将表单中的check_box_tag更改为:
<td><%= check_box_tag 'people[]', person.id %></td>
在我的参数中给了我这样的东西:
"people"=>["67", "11", "10", "23", "3", "1"],
然后在控制器中,我循环通过:人员参数并取出ID:
if params[:people]
params[:people].each do |p|
@smart_list.people << Person.where(id: p)
end
end
我觉得这很难看 - 但它确实有效。如果有人有更好的方式来形成视图或控制器,我仍然想知道更好的方法来做到这一点。 - 谢谢