预计,得到String HABTM

时间:2012-09-16 02:05:55

标签: string forms checkbox object-expected

此表格:

<%= 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)

所以,我想我的问题是 - 有没有办法打破那些字符串中的东西?或者我可以通过更好的方式通过表单发送它们吗?或者在控制器中捕获它们更好的方法?

感谢您的帮助 - 乔伊

1 个答案:

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

我觉得这很难看 - 但它确实有效。如果有人有更好的方式来形成视图或控制器,我仍然想知道更好的方法来做到这一点。 - 谢谢