Как передать параметры через формы с рельсами - PullRequest
0 голосов
/ 22 ноября 2011

Вопрос новичка. У меня есть модальные коробки со списком поставщиков по индексу. Я хочу создать новую форму покупки для этого поставщика (и filter @ supplier.products), поэтому необходимо как-то передать supplier_id.

Модальное окно

<% @suppliers.each do |supplier| %>
  <li><%= link_to supplier.name, new_purchase_path(@supplier) %></li>
<% end %>

Форма

<%= nested_form_for(@purchase) do |f| %>
  <div class="field">
    <%= f.label :supplier_id, :class => "mandatory" %>
    <%= @supplier.name %>
    <%= collection_select(:purchase, :supplier_id, Supplier.all, :id, :name, :prompt => true) %>
  </div>

Я получаю ноль ошибок при этом undefined method "name" for nil:NilClass

Не уверен, нужно ли мне определять @supplier in purchase#new action

Спасибо.

* Редактировать * Я пытаюсь создать новую форму с помощью http://localhost:3004/purchases/new?supplier_id=2. Через консоль я могу проверить, что для параметра supplier_id установлено значение Parameters: {"supplier_id"=>"2"}, однако, когда я отправляю форму, она жалуется на то, что supplier_id равен nil.

Как проверить, правильно ли установлен supplier_id?

def new
@supplier = Supplier.find(params[:supplier_id])
@purchase = current_user.purchases.new(params[:supplier_id => @supplier.id])
@products = @supplier.products

@products.each do |product|
  @purchase.purchase_items.build(:product_id => product.id)
end

respond_to do |format|
  format.html # new.html.erb
  format.json { render json: @purchase }
 end
end

1 Ответ

0 голосов
/ 22 ноября 2011

У вас есть набор переменных с одинаковыми именами, и это сбивает с толку.

@ поставщики @supplier поставщик

Откуда каждый из них?

Мое лучшее предположение заключается в том, что первое модальное поле должно быть таким:

<% @suppliers.each do |supplier| %>
  <li><%= link_to supplier.name, new_purchase_path(supplier) %></li>
<% end %>

Но ваше сообщение об ошибке, кажется, указывает, что поставщик ноль ... что заставляет меня задуматься о том, что вы делаете, чтобы заполнить @ поставщики

Если у вас нет каких-либо поставщиков еще ... Supplier.all также вернет ноль, и это может плохо работать с collection_select (т. Е. Он попытается вызвать: name у поставщика, когда еще нет) Поэтому вам, возможно, придется поместить что-то вроде if Supplier.count > 1 вокруг этого выбора коллекции ... или что-то еще, соответствующее вашей бизнес-логике.

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