在 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
我正在尝试在 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