向用户显示"立即购买"或"编辑演出"或者"下载按钮"在Rails 4中

时间:2015-05-23 14:04:14

标签: ruby-on-rails ruby ruby-on-rails-4 model-view-controller model

这是我目前的代码

<% 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 %>

1 个答案:

答案 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) %>