2011-06-28 8 views
0

私はここで少し概念的な問題で立ち往生しています。ポスト、タグ、およびユーザのために、以下の[抽象化]の設定を前提としていますRails MVC:collection_selectはどのコレクションレコードをレンダリングすべきかを知っていますか?

Post belongs_to Tag 
Tag has_many Posts 
User has_many Tags, 
     has_many Posts 

ユーザーが唯一の彼の関連するタグのいずれかでポストにタグを付けることができます。新しい投稿フォームビューで

は、私は今、タグを選択するためのオプションは以下があります。

@tags = current_user.tags

  • f.collection_select :tag_id, @tags,とコントローラの新アクションで

    1. f.collection_select :tag_id, current_user.tags, ...

    質問:概念的に正しいオプションは何ですか?

    MVCの観点からは、私は間違いなく2番目のオプションを使用する傾向があります。ビューでは、collection_selectでレンダリングするタグがユーザー(さらに具体的には、現在のユーザー)に関連付けられていることが分かります。

    しかし、official api documentation for collection_selectとウェブの周りにいくつかのothertutorialsに私はこのような何かを参照してください。

    collection_select(:post, :author_id, Author.all, ...) 
    

    明確に最初のオプションを好みます。このアプローチのプロサイトでは、投稿の保存アクションが失敗し、新しいアクションを再度レンダリングしたい場合に、コントローラの作成アクションで@タグを再定義する必要はありません。

    事前にお寄せいただきありがとうございます。

  • 答えて

    1

    最初のオプションは何も問題ありません。初心者にとっては、簡単です(1行少ないコード)。あなたのコントローラ内で余分なインスタンス変数を設定しても、実際には何も得られません。

    コントローラーについて考えてみると、コントローラだけが受け取る入力に直接基づいている場合(たとえば、URLのパラメータ、クエリ文字列、またはPOSTされたフォーム)。

    この場合のビューでは、現在のユーザーを判断する方法は決まっていません。(これはおそらくトップレベルのApplicationControllerやDeviseなどから継承されていますが)コントローラからのものです。現在のユーザのタグは、ドロップダウン・ビュー内で選択可能でなければならない。

    これは役に立ちますか?

    +0

    これは助けになります。私は最初の選択肢に行きます。どうもありがとう! – emrass

    関連する問題