2012-05-13 40 views
-1

這是我的路線:我如何使用嵌套控制器來渲染?

resources :auctions do 
    resources :bids 
end 

我有auctions#show觀點與形式投標:

= form_for [@auction, @bid] do |form| 
    = form.input :maximum 
    = form.button :submit 

這當然POSTauctions/:auction_id/bids

我有這個bids#create行動:

def create 
    #...some_logic... 
    if @bid.save 
    #...happy_face... 
    else 
    # See Below 
    end 
end 

在這個 「如果出價未保存的邏輯」,我有:

render 'auctions/show' 

這應該(和不)儘量使app/views/auctions/show.html.erb但我得到這個錯誤:

Missing partial bids/info-panel, application/info-panel with {:locale=>[:en], :formats=>[:html], :handlers=>[:erb, :builder, :coffee]}. Searched in: 
    * "app/views" 
    * "gems/devise-2.0.4/app/views" 

顯然這是一個問題! 它正在尋找app/views/bids而不是app/views/auctions的部分。

如何使這些部分的上下文成爲app/views/auctions

回答

1

由於這是一個錯誤條件,爲什麼不重定向到auctions/show動作而不是渲染其模板。 您可以將錯誤元數據與您的重定向一起傳遞,以便auctions/show操作知道其錯誤狀態並相應地呈現表單。

+0

是的,我深深地認爲(我想我可能會這樣做),但我正在處理的應用程序並不會那麼容易:(無論如何標記你的答案。 – krainboltgreene

1

像這樣的東西應該這樣做:

<%= render :partial => "auctions/info-panel" %> 

如果不包括領先的目錄,它假定當前目錄。

+0

我不想改變'app/views/auctions/show.html.erb'中的所有部分調用來指定auctions目錄。這似乎很愚蠢,非常乾燥。 – krainboltgreene

+0

另外,任何* _path方法都不會起作用,因爲它們處於「auctions /:auction_id/bids」路線的上下文中。 – krainboltgreene