如何使用嵌套控制器进行渲染?

时间:2012-05-13 22:23:31

标签: ruby-on-rails ruby ruby-on-rails-3 partials nested-controls

这些是我的路线:

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

2 个答案:

答案 0 :(得分:1)

这样的事情应该这样做:

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

如果您不包含前导目录,则它将采用当前目录。

答案 1 :(得分:1)

由于这是一个错误条件,为什么不重定向到拍卖/显示操作而不是渲染其模板。 您可以使用重定向传递错误元数据,以便拍卖/显示操作知道其错误状态并相应地呈现表单。