【问题标题】:How do I get render to work with nested controllers?如何让渲染与嵌套控制器一起使用?
【发布时间】:2012-05-14 11:40:55
【问题描述】:

这些是我的路线:

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

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

    • 是的,我认真考虑过这一点(我想我可能会这样做),但我正在处理的应用程序并没有那么容易:(无论如何都将你的标记为答案。
    【解决方案2】:

    应该这样做:

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

    如果不包含前导目录,则假定为当前目录。

    【讨论】:

    • 我不愿意更改app/views/auctions/show.html.erb 中的所有部分调用来指定拍卖目录。这看起来很傻,而且很不干。
    • 此外,任何 *_path 方法都不会工作,因为它们在 auctions/:auction_id/bids 路由的上下文中。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-10
    • 1970-01-01
    • 1970-01-01
    • 2011-10-09
    • 2020-05-14
    相关资源
    最近更新 更多