1

我想将我<%= form_for(@something) do |f| %>当前位于 app/views/something/new.html 中的内容放在多个页面中,所以可能在 app/views/layouts/application.html.erb 中

如何让@something变量和表单在那里或其他地方正常工作——因为它是在控制器的 #new 操作中定义的SomethingController,它似乎只在适当的new.html.erb视图中可用。

4

3 回答 3

2

您可以将表单放在任何地方,只需@something在控制器中提供一个实例变量

基本用法在这里。

ThisThingsController
  def show
    @this_thing = foo
    @that_thing  = bar
  end
end

# View
<%= @this_thing %>
<%= form_for @that_thing %>

当然,您可以使用 partial 来呈现表单,只要您为其提供所需的变量即可。

于 2013-06-21T19:50:42.900 回答
1

在不完全了解您要完成的工作的情况下,我会提出这个建议。在 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 %>
于 2013-06-21T19:54:20.460 回答
1

尝试

<%= form_for SomeThing.new do |f| %>
于 2013-06-21T20:02:41.820 回答