我有一个 text_area 表单来创建一个快速Idea
对象。此表单出现在网站的许多部分,因此我将其作为shared/_idea_form.html.haml
文件移动。
我目前在表单存在的每个控制器操作中定义新对象@ideas = Idea.new
以使其工作。
是否有更方便/全局的方式定义@ideas = Idea.new
每个动作的外部?即作为应用程序控制器中的 before_filter。我不确定这是否是正确的方法。
我有一个 text_area 表单来创建一个快速Idea
对象。此表单出现在网站的许多部分,因此我将其作为shared/_idea_form.html.haml
文件移动。
我目前在表单存在的每个控制器操作中定义新对象@ideas = Idea.new
以使其工作。
是否有更方便/全局的方式定义@ideas = Idea.new
每个动作的外部?即作为应用程序控制器中的 before_filter。我不确定这是否是正确的方法。
你可以直接放在视图中
<%= form_for @idea ||= Idea.new do |f| %>
#your text area
<%end%>
如果您在大多数操作中都有它是的,那应该是一个好方法。如果是我在你的位置,我想我会打破规则,并且会部分地这样做......有时规则没有意义,这次就是其中之一。您只需要在每个页面上都有一个表单,因此您需要始终为表单创建一个新想法。或者在部分上执行此操作,或者只是在没有帮助的情况下创建表单。
只有一种意见:)
有很多选择:使用decent_exposure
gem(试试看,很酷!),使用before_filter
s 设置 的值,在表单中@idea
手动创建新Idea
的,定义一些帮助程序,为表单提供准备好的Idea
.
在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