2011-11-22 52 views
0

初学者的问题。我有索引上的模式框列表供应商。我想为此供应商提供新的采购表单(以及过滤器@ 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是无形式的控制台验证。

如何确保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 
+0

你能举出适当的控制器动作吗?你在哪里使用supplier_id来提取供应商等? :) –

+0

这是什么:'params [:supplier_id => @ supplier.id]'?不应该只是':supplier_id => @ supplier.id'? –

回答

0

你有混合使用类似命名的变量,它很混乱。

@suppliers @supplier 供应商

从他们每个人都在哪里来?

我最好的猜测是,第一个模式对话框应该是这样的:

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

但你的错误信息似乎表明,供应商是零......这让我不知道它是什么你做,以填补@suppliers

如果你碰巧不任何供应商尚未... Supplier.all也将返回零,可能与collection_select表现不好(即,它会尝试拨打:名称上的供应商时,有还没有)。因此,您可能必须将类似if Supplier.count > 1的东西放在该集合选择...或适合您的业务逻辑的其他东西上。

+0

嗨艾琳,谢谢你的回复。让我用适当的要求更新我的问题。不过,我可以确认Db中有几个供应商,因此问题不在此处 – Gaelle