Ruby on Rails simple_form_for all.each делать

Я использую Rails 3.0, Ruby 1.9.2 и гем Plataformatec simple_form. Этот код работает с 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?

Заранее спасибо!


person sizzle    schedule 11.08.2011    source источник
comment
Что ты имеешь в виду don't work? Покажите, что происходит. Показать ошибки. Покажите что-нибудь, что мы можем обсудить   -  person fl00r    schedule 11.08.2011
comment
А почему имя вашей модели во множественном числе? Я имею в виду Cars   -  person fl00r    schedule 11.08.2011
comment
Извините, модель не должна была быть во множественном числе, плохое копирование.   -  person sizzle    schedule 13.08.2011


Ответы (2)


Вы не можете использовать simple_form точно так же, как form_for.

Например, в simple_form геме нет никакого метода check_box_tag. Существует ТОЛЬКО inuput полей, которые вы можете указать с помощью опции :as. Таким образом, ваш check_box_tag будет преобразован в

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

Checkout Usage, Rdoc и другие полезные вещи https://github.com/plataformatec/simple_form

person fl00r    schedule 11.08.2011

Проблема была в коде контроллера.

В «новом» действии контроллера я не могу просто выполнить:

@provider = Provider.new(params[:provider])

как обычно.

Вместо этого я должен обрабатывать каждый параметр отдельно:

@provider.location = params[:provider][:location] и т.д...

Для флажков Car я добавляю каждый car_id из параметра car_ids в ассоциацию моделей автомобилей «has_many» по одному:

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

Тогда я могу позвонить:

@provider.save!

И он сохраняет правильно (моя первоначальная проблема заключалась в том, что он не сохранял выбранные автомобили).

По какой-то причине я смог понять это только после публикации вопроса здесь. Забавно, как это работает.

Спасибо всем за ваши ответы!

person sizzle    schedule 13.08.2011