Ruby on Rails simple_form_for all.each

时间:2011-08-11 16:32:37

标签: ruby-on-rails-3 forms simple-form

我正在使用Rails 3.0,Ruby 1.9.2和Plataformatec simple_form gem。此代码适用于form_for但不适用于simple_form_for:

<%= simple_form_for(@provider) do |f| %>
  <% Car.all.each do |c| %>
    <div>
      <%= check_box_tag :car_ids, c.id, @store.cars.include?(c), :name => 'store[car_ids][]' %>
      $<%= c.cost %> | <%= c.description %>
    </div>
  <% end %>
  <div class="actions">
    <%= f.submit "New" %>
  </div>
<% end %>

如何使用simple_form_for?

提前致谢!

2 个答案:

答案 0 :(得分:0)

您无法像simple_form一样使用form_for

例如,check_box_tag gem中没有任何simple_form方法。您只能使用inuput选项指定:as个字段。因此,您的check_box_tag将转换为

f.input car_ids, ..., :as => :check_box

Checkout Usage,Rdoc和其他有用的东西https://github.com/plataformatec/simple_form

答案 1 :(得分:0)

问题出在控制器代码中。

在“新”控制器动作中,我不能简单地执行:

@provider = Provider.new(params[:provider])
正如人们通常的那样。

相反,我必须分别处理每个参数:

@ provider.location = params [:provider] [:location]     等...

对于Car复选框,我将car_ids参数中的每个car_id一次添加到“has_many”汽车模型关联中:

car_ids = params[:provider][:car_ids]
car_ids.each do |cid|
  @provider.cars << Car.find(cid)
end

然后我可以致电:

@provider.save!

它可以正确保存(我最初的问题是它没有保存选定的汽车)。

出于某种原因,我只有在这里发布问题后才能解决这个问题。有趣的是如何运作。

感谢所有人的回复!