在 Rails 4 中从另一个控制器呈现动作模板

Rendering an Action Template from another controller in Rails 4

我正在尝试在 post/show 视图中呈现 replies/new 视图。当我尝试

render "replies/new" 

它向我显示错误,因为它似乎在寻找

replies/_new.html.erb

我用的时候有效

render template: "replies/new"

但看起来它不会激活回复控制器中的新操作,因此它不会创建新回复。我可以在 Post show 动作中添加类似 @reply = Reply.new 的内容,但我认为必须有更多的 DRY解决它的方法。

But looks like it does not activate new action in replies controller so it doesn't create new reply

原因:- 渲染不会创建新的 HTTP 请求(渲染不会加载与控制器操作关联的任何上下文。因此,它将渲染模板),您可能在该新操作中有很多代码但是none 其中 运行。只会渲染视图。

你可以试试这个

posts#show

def show
  #foo = bar
  render "replies/new", locals: {reply: Reply.new}
end

这样你也必须在 replies#new 中使用局部变量

def new
  #foo = bar
  reply = Reply.new
  render locals: {reply: reply}
end

replies/new.html.erb 中使用 reply 而不是 @reply