は、以下の多型の関係のRails 3のポリモーフィックな関連、ビューページ
class Person
has_many :photos, :as => :attachable
end
class Animal
has_many :photos, :as => :attachable
end
class Photo
belongs_to :attachable, :polymorphic => true
end
に人や動物、物体のビューページを考えてみて、それぞれの写真のギャラリーが含まれています。
...
<%= link_to(image_tag(photo.image_url(:thumb).to_s), [@attachable, photo]) %>
...
は、しかし、私の写真のビューページでは、私はそれが人や動物に属しているかどうかに応じて異なる情報を提示したい: ページには、次のコードが含まれています。例えば、それが人物である場合、彼/彼女の身長、ペットのリストを表示する必要があります。動物の場合は、その品種、所有者などを表示する必要があります
これを行うには最適な解決策は何ですか?
私は2つの可能な解決策を考えることができます。
一つの方法は、各クラスのための写真の別のコントローラのアクションに向けることである可能性があります。
<%= link_to(image_tag(photo.image_url(:thumb).to_s), show_person_path[@attachable, photo]) %>
<%= link_to(image_tag(photo.image_url(:thumb).to_s), show_animal_path[@attachable, photo]) %>
よう 何かがしかし、私はこのアプローチはポリモーフィッククラスでビューロジックの不適切な代表団を紹介すると思います。
もう1つの方法は、それぞれのPersonクラスとAnimalクラスにコントローラアクションを導入して、対応する情報を表示する方法です。ギャラリーは上記のアクションの代わりにこのアクションにリンクし、アクションは写真をレンダリングする必要があります。
しかし、私は表示される対応する情報が各クラスのための独自のアクションに値する少数であるように感じる。たぶんヘルパーで十分ですが、私は正しいアプローチがわかりません(上記の前提が真であれば私を修正してください)。
私は、新しいタイプのアタッチ可能なビューを拡張するより良い方法があると思っていたので、この解決策を実行する上で第二の考えがありました。しかし、それぞれのコントローラーを別々に導入するのではなく、すべてのアタッチテーブルの多形ルートを持つという優雅さを保ちます。ありがとう! – nbancajas