仅当关联存在时才显示链接?
问题描述:
在我的应用程序,一个Product
有许多subscriptions
与用户是User
:仅当关联存在时才显示链接?
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 %>
答
我会建议用户类
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 %>