2012-04-26 6 views
1

私は速いIdeaオブジェクトを作成するtext_areaフォームを持っています。このフォームはサイトの多くの部分に表示されるので、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が、それはクールだ!)、フォームで新しいIdeaを作成し、手動で、@ideaの値を設定するためのbefore_filter Sを使用して、あなたのフォームに用意されたIdeaを提供するヘルパーを定義します。 アプリ/コントローラ/ application_controller.rb

0

リクエストごとに新しいオブジェクトに @ideaを設定します
class ApplicationController < ActionController::Base 
    before_filter :create_new_idea 

    def create_new_idea 
    @idea = Idea.new 
    end 
end 

@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 
関連する問題