这是我目前的代码
<% if user_signed_in? && @gig.user == current_user %>
<%= link_to "Edit your gig", edit_gig_path %>
<% else %>
<%= link_to "Get this gig for #{@gig.pointsneeded} points", download_path(@gig)%>
<% end %>
第一行显示如果用户被签下并且演出由当前用户拥有显示&#34;编辑您的演出&#34; , 或其他如果演出不属于用户,请向他显示&#34;为(一些)积分获取此演出&#34; 。
这是我的模特关系
Purchase.rb
class Purchase < ActiveRecord::Base
belongs_to :gig
belongs_to :buyer, class_name: 'User'
belongs_to :seller, class_name: 'User'
end
User.rb
class User < ActiveRecord::Base
has_many :purchases, foreign_key: 'buyer_id'
has_many :gigs, through: :purchases, source: :buyer
has_many :gigs
has_many :sales, foreign_key: 'seller_id', class_name: 'Purchase'
end
Gig.rb
class Gig < ActiveRecord::Base
has_many :purchases
has_many :buyers, through: :purchases
has_many :sellers, through: :purchases
belongs_to :user
end
问题:如何制作逻辑,如果用户拥有演出节目&#34;编辑您的演出&#34;, elsif < / strong>如果用户购买了演出 来自其他用户,并在他的
current_user.purchases
列表中显示 &#34;你已经购买了这个演出&#34;,其他&#34;购买20分&#34;。
完整解决方案:
<% if user_signed_in? && @gig.user == current_user %>
<%= link_to "Edit your box", edit_gig_path%>
<% elsif @gig.buyers.pluck(:id).include?(current_user.id) %>
<%= link_to "you already purchased this gig", edit_gig_path%>
<% else %>
<%= link_to "Get this box for #{@gig.pointsneeded} points", download_picture_path(@gig)%>
<% end %>
答案 0 :(得分:1)
首先,对此进行更改,以便@gig不会进行SQL调用来加载用户,而是比较gig的user_id:
<% if user_signed_in? && @gig.user_id == current_user %>
比较id而不是实际的对象会使这个页面更快。
要检查current_user是否已购买演出,请执行以下操作:
<% if @gig.buyers.pluck(:id).include?(current_user.id) %>