2013-02-13 67 views
1

我是Rails的新手。随意编辑问题标题。 其中一些可能对您很明显。 (我希望!)Rails 3:如何从索引页创建相关记录

我有一个拍卖其中有许多很多(出售物品)。
我已经设置了拍卖,我可以添加/编辑/删除就好了。

我希望能够从一个URL查看/添加/删除很多从一个页面类似于/拍卖/ 1 /手/让我建立了我的路线,像这样:

resources :auctions, :except => :edit do 
    resources :lots 
end 

我的模型看起来像这样的:

class Auction < ActiveRecord::Base 
    ... 
    has_many :lots 
end 

class Lot < ActiveRecord::Base 
    belongs_to :auction 
    ... 
end 

我lots_controller.rb看起来是这样的:

def index 
    @auction = Auction.find(params[:auction_id]) 
    @lots = @auction.lots 
end 

我的手/ index.html.erb文件:

<ul> 
<% @lots.each do |lot| %> 
    <li><%= lot.description %></li> 
<% end %> 
</ul> 

这使得很多很好。
问题是,当我尝试将表单创建新的批次。我不知道我需要放在哪里。

<%= form_for(@auction.lots.build) do |f| %> 
    <%= f.input :description %> 
<% end %> 

并称,查看网页时,给了我以下错误:
undefined method `lots_path' for #<#<Class:0x007fb77ea26308>:0x007fb77d43fd00>

我的印象是,@auction.lots.build是把有正确的说法。

任何帮助,将不胜感激。谢谢。

回答

1

form_for正试图从新的Lot实体(和失败)推断行动路径。你可以直接指定的:url

<%= form_for(@auction.lots.build, url: auction_lots_path(@auction)) do |f| %> 

或者,传递一个数组来指示的form_for,这个资源是嵌套:

<%= form_for([@auction, @auction.lots.build]) do |f| %> 
+0

我用过的第一个解决方案,和它的工作大部分。页面加载后,我看到了flash消息,记录已创建,但auction_id未填充。 – 2013-02-13 17:11:29

+0

你可以发布你的'create'动作看起来像什么,并传递给它什么params(你可以在你的日志中看到这个)?另外,我改变':url'使用'auction_lots_path'而不是'new_auction_lot_path' - 看看是否有帮助。 – PinnyM 2013-02-13 17:20:57

+0

我的创建操作不正确。这只是'@auction = Auction.find(params [:auction_id])'。我加了'@lot = @ auctions.lots.build(params [:lot])',现在它可以工作。 – 2013-02-13 17:23:42

相关问题