让'form_for(@something)'在new.html.erb之外工作

时间:2013-06-21 19:20:22

标签: ruby-on-rails ruby ruby-on-rails-3.2 actionpack

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

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

3 个答案:

答案 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| %>