我想将我<%= form_for(@something) do |f| %>
当前位于 app/views/something/new.html 中的内容放在多个页面中,所以可能在 app/views/layouts/application.html.erb 中
如何让@something
变量和表单在那里或其他地方正常工作——因为它是在控制器的 #new 操作中定义的SomethingController
,它似乎只在适当的new.html.erb
视图中可用。
我想将我<%= form_for(@something) do |f| %>
当前位于 app/views/something/new.html 中的内容放在多个页面中,所以可能在 app/views/layouts/application.html.erb 中
如何让@something
变量和表单在那里或其他地方正常工作——因为它是在控制器的 #new 操作中定义的SomethingController
,它似乎只在适当的new.html.erb
视图中可用。
您可以将表单放在任何地方,只需@something
在控制器中提供一个实例变量
基本用法在这里。
ThisThingsController
def show
@this_thing = foo
@that_thing = bar
end
end
# View
<%= @this_thing %>
<%= form_for @that_thing %>
当然,您可以使用 partial 来呈现表单,只要您为其提供所需的变量即可。
在不完全了解您要完成的工作的情况下,我会提出这个建议。在 ApplicationController 中添加一个前置过滤器(或者,您可以创建一个模块并在需要的地方混合它)。然后在需要时调用 before_filter。此示例将始终运行 before 过滤器:
class ApplicationController
before_filter :set_something
private
def set_something
@something = ... # Fill in the logic here
end
end
然后在需要的地方添加您的表单。您甚至可以根据是否设置了@something 使其有条件地出现。
<% if @something %>
# Form goes here
<% end %>
尝试
<%= form_for SomeThing.new do |f| %>