2012-04-26 50 views
1

我有一個text_area表單來創建一個快速的Idea對象。此表單出現在網站的很多部分,因此我將它作爲shared/_idea_form.html.haml文件移動。在Rails中聲明具有共享部分形式的對象的位置?

我目前在每個控制器操作中定義新對象,其中表單存在與@ideas = Idea.new使其工作。

是否有一個更方便/全局的方式定義@ideas = Idea.new以外的每個動作?即作爲應用程序控制器中的before_filter。我不確定這是否是正確的方法。

回答

1

,你可以把它直接針對

<%= form_for @idea ||= Idea.new do |f| %> 
    #your text area 
    <%end%> 
0

如果您有它的大部分行動是的,這應該是一個很好的方式。如果我在你的位置上,我想我會制定規則,並會在部分內容中做到這一點...有時規則不合理,這一次是其中之一。你只需要在每個頁面上都有一個表單,所以你需要爲表單創建一個新的想法。或者在部分表單上創建表單,或者只是在沒有幫助器的情況下創建表單。

只是一個意見:)

0

有噸的選項:使用decent_exposure寶石(!try it,它的涼爽),使用before_filter,要制定的@idea的價值,手動創建表單中的新Idea,定義一些幫助者,爲你的表格提供準備好的Idea

0

應用程序/控制器/ 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