2013-02-13 63 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

相關問題