我想将我当前位于app / views / something / new.html中的<%= form_for(@something) do |f| %>
放在多个页面中,因此可能在app / views / layouts / application.html.erb
如何让@something
变量和表单在那里或其他地方正常工作 - 因为它是在SomethingController
的控制器#new动作中定义的,它似乎只在适当的new.html.erb
视图..
答案 0 :(得分:2)
您可以将表单放在任何位置,只需在控制器中提供@something
的实例变量
基本用法在这里。
ThisThingsController
def show
@this_thing = foo
@that_thing = bar
end
end
# View
<%= @this_thing %>
<%= form_for @that_thing %>
当然你可以使用partial来渲染表单,只要你用它需要的变量来提供它。
答案 1 :(得分:1)
如果没有完全理解你想要完成什么,我会提出这个建议。 将一个before过滤器添加到ApplicationController(或者您可以创建一个模块并在需要的地方混合它)。然后在需要时调用before_filter。此示例将始终运行before filter:
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 %>
答案 2 :(得分:1)
尝试
<%= form_for SomeThing.new do |f| %>