在Rails中查找条件

时间:2015-09-23 14:39:03

标签: ruby-on-rails ruby-on-rails-4 activerecord rails-activerecord active-record-query

我正在开展一个项目,用户可以创建座位有限的活动,注册并参加其他活动。

到目前为止,我有一个活动,用户和座位模型。并且已经删除了用户在我的Seat模型中创建重复席位的功能。

class Event < ActiveRecord::Base
  validates :title, :from_date, :from_time, :number_of_seats, presence: true
  belongs_to :user
  has_many :seats
end

class Seat < ActiveRecord::Base
  validates :event_id, :user_id, presence: true
  validates_uniqueness_of :user_id, :scope => :event_id
  belongs_to :event
  belongs_to :user
end

目前,我有一个列出所有可用事件的页面。我想要做的是创建一个查询用户正在参加的所有事件,并从页面中删除它们(或让用户知道他们已经参加)。

我能够在座位控制器中创建一个用户正在参与的所有课程的页面:

def index
  @seats = Seat.where(user_id: current_user.id)
end

这在页面上:

<h1 class="page-header">My Classes</h1>
    <% @seats.each do |p| %>
        <%= link_to Event.find(p.event_id).title, p %>
    <% end %>

我尝试使用Find with conditions: Stack Overflow

解决此问题

它让我靠近,但没有雪茄......

如何创建一个Active Record Query,它返回用户未参加的所有事件?

1 个答案:

答案 0 :(得分:2)

您可以使用.where.not

<% Event.where.not(id: @seats.map(&:event_id)).each do |p| %>
   <...>
<% end %>