4

製品など、ネストされていないモデルとネストされているモデルがある場合、問題の解決策は何ですか?

「製品」は「イベント」に属することができ、製品は単に独立していることもできます。

これは、次のようなルートを持つことができることを意味します。

map.resources :products # /products
map.resources :events do |event|
  event.resources :products # /events/1/products
end

あなたの見解でそれをどのように適切に処理しますか?

注: これは管理パネル用です。チケット (製品)、フォームを作成し、誰が応答したかを確認するためのサイド パネルを備えた「イベントの作成」ページを作成できるようにしたいと考えています。「イベント チケット」サイド パネル ボタンをクリックすると、 に移動します/events/my-new-event/tickets。しかし、管理パネル用のルート「製品」タブもあり、チケットやその他のランダムな製品を一覧表示できます。「チケット」ビューと「製品」ビューは 90% 同じように見えますが、チケットにはそれが属するイベントに関する情報が含まれています。

次のようなビューが必要なようです。

  • 製品/index.haml
  • 製品/show.haml
  • イベント/製品/index.haml
  • イベント/製品/show.haml

しかし、それは DRY ではないようです。または、製品にイベント ( @product.event.nil?) があるかどうかを確認するための条件付きチェックを行うこともできますが、ビューが理解しにくくなります。

これらの状況にどのように対処しますか?

本当にありがとう。

4

3 に答える 3

2

必要なものすべてを管理するために、独自のビューを持つ個別の管理コントローラーを作成することをお勧めします。そして、顧客のロジックは製品コントローラーに留まりました。

于 2010-03-22T22:55:14.700 に答える
0

この問題に対する適切でクリーンな解決策はありません。通常、ビューに大きな違いがない場合は、単一のビューを使用して、のようなコードを追加します@product.event.nil?。たとえば、このメソッドを短くする変数やヘルパーをいつでも追加できhas_event?ます。そうすると、ビューがよりきれいに見えます。そして、次のようなコードで使用します。

<% if has_event? %>
  some html
<% end %>

または単一行の場合:

<%= link_to 'Something special', foo_path if has_event? %>

反対に、両方のビューで同じパーシャルをいくつか作成し、それらをいくつかのフォルダーに配置して、たとえば/shared/products/...次のようにビューからレンダリングすることができます。

<%= render :partial => '/shared/products/info' %>

等々。

しかし、あまり違いがなければ、私は実際にifバージョンを使用します。

于 2010-03-24T09:43:03.647 に答える
0

ビューは によって処理されますProductsController。リソースのネストに応じて、コントローラーのロジックを変更できます。

# app/controller/products_controller.rb
# ...some code...
def index
    @event = Event.find_by_id(params[:event_id]) if params[:event_id]
    @products = @event ? @event.products : Product.all
end

ビューは、通常の製品ビューによって処理されます

# app/views/products/index.html.haml
- unless @products.blank?
    - @products.each do |product|
        %p= product.some_attribute
于 2011-07-28T11:52:52.840 に答える