1

我有一个 text_area 表单来创建一个快速Idea对象。此表单出现在网站的许多部分,因此我将其作为shared/_idea_form.html.haml文件移动。

我目前在表单存在的每个控制器操作中定义新对象@ideas = Idea.new以使其工作。

是否有更方便/全局的方式定义@ideas = Idea.new每个动作的外部?即作为应用程序控制器中的 before_filter。我不确定这是否是正确的方法。

4

4 回答 4

1

你可以直接放在视图中

  <%= form_for @idea ||= Idea.new do |f| %>
     #your text area
    <%end%>
于 2012-04-26T21:07:01.477 回答
0

如果您在大多数操作中都有它是的,那应该是一个好方法。如果是我在你的位置,我想我会打破规则,并且会部分地这样做......有时规则没有意义,这次就是其中之一。您只需要在每个页面上都有一个表单,因此您需要始终为表单创建一个新想法。或者在部分上执行此操作,或者只是在没有帮助的情况下创建表单。

只有一种意见:)

于 2012-04-26T21:10:14.200 回答
0

有很多选择:使用decent_exposuregem(试试看,很酷!),使用before_filters 设置 的值,在表单中@idea手动创建新Idea的,定义一些帮助程序,为表单提供准备好的Idea.

于 2012-04-26T21:15:14.497 回答
0

app/controllers/application_controller.rb

class ApplicationController < ActionController::Base
  before_filter :create_new_idea

  def create_new_idea
    @idea = Idea.new
  end
end

这将@idea在每个请求上设置一个新对象。在某些情况下,您肯定不想@idea设置为新实例,甚至根本不想设置。在这种情况下,有多种选择,这里有一个:

class ApplicationController < ActionController::Base
  before_filter :create_new_idea, lambda {|controller| controller.set_new_idea?}

  def create_new_idea
    @idea = Idea.new
  end

  def set_new_idea?
    # this should be false in some case
  end
end
于 2012-04-27T03:24:09.700 回答