Ruby on Rails simple_form_for all.each делать - PullRequest
1 голос
/ 11 августа 2011

Я использую 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?

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

Ответы [ 2 ]

0 голосов
/ 13 августа 2011

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

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

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

как обычно.

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

@provider.location = params [: поставщик] [: местоположение] и т.д ...

Для флажков 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!

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

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

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

0 голосов
/ 11 августа 2011

Вы не можете использовать 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...