0

私のアプリケーションでは、サブスクライバーが a であるProduct多くの a があります。subscriptionsUser

class User
  has_many :products
  has_many :subscriptions, :foreign_key => :subscriber_id
end

class Product
  belongs_to :store
  has_many :subscriptions, :as => :subscribable
end

class Subscription
  belongs_to :subscriber, :class_name => "User"
  belongs_to :subscribable, :polymorphic => true
end

製品にサブスクリプションがあるかどうかに基づいてリンク ブロックを表示するにはどうすればよいですか?

<% if #@product.subscription.present? %> 
   <%= link_to "Unsubscribe", { :controller => "products", :action => "unsubscribe_product", :id => product.id }, :method => :delete %>
 <% else %>
   <%= link_to "Subscribe", { :controller => "products", :action => "subscribe_product", :id => product.id }, :method => :post %>
<% end %>
4

1 に答える 1

2

User クラス内でメソッドを使用することをお勧めします

class User
  def subscribed_for?(subscribable)
    subscriptions.where(:subscribable_id => subscribable.id, :subscribable_type => subscribable.type).any?
  end

end

および表示用

<% if current_user.subscribed_for?(product) %> 
   <%= link_to "Unsubscribe", { :controller => "products", :action => "unsubscribe_product", :id => product.id }, :method => :delete %>
 <% else %>
   <%= link_to "Subscribe", { :controller => "products", :action => "subscribe_product", :id => product.id }, :method => :post %>
<% end %>
于 2012-04-07T18:18:17.397 に答える