我有一個text_area表單來創建一個快速的Idea
對象。此表單出現在網站的很多部分,因此我將它作爲shared/_idea_form.html.haml
文件移動。在Rails中聲明具有共享部分形式的對象的位置?
我目前在每個控制器操作中定義新對象,其中表單存在與@ideas = Idea.new
使其工作。
是否有一個更方便/全局的方式定義@ideas = Idea.new
以外的每個動作?即作爲應用程序控制器中的before_filter。我不確定這是否是正確的方法。
我有一個text_area表單來創建一個快速的Idea
對象。此表單出現在網站的很多部分,因此我將它作爲shared/_idea_form.html.haml
文件移動。在Rails中聲明具有共享部分形式的對象的位置?
我目前在每個控制器操作中定義新對象,其中表單存在與@ideas = Idea.new
使其工作。
是否有一個更方便/全局的方式定義@ideas = Idea.new
以外的每個動作?即作爲應用程序控制器中的before_filter。我不確定這是否是正確的方法。
,你可以把它直接針對
<%= form_for @idea ||= Idea.new do |f| %>
#your text area
<%end%>
如果您有它的大部分行動是的,這應該是一個很好的方式。如果我在你的位置上,我想我會制定規則,並會在部分內容中做到這一點...有時規則不合理,這一次是其中之一。你只需要在每個頁面上都有一個表單,所以你需要爲表單創建一個新的想法。或者在部分表單上創建表單,或者只是在沒有幫助器的情況下創建表單。
只是一個意見:)
有噸的選項:使用decent_exposure
寶石(!try it,它的涼爽),使用before_filter
,要制定的@idea
的價值,手動創建表單中的新Idea
,定義一些幫助者,爲你的表格提供準備好的Idea
。
在應用程序/控制器/ 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