我有一个郊游表,它基本上保存了有关“郊游”的一些信息。然后,这些郊游有乘员组,这些乘员组具有用户(通过crew_users)

请注意,郊游有很多船员,所以船员表中有一个outing_id

现在,我需要找到用户的下一个郊游,如第一个郊游中的outing.start_time > Time.now

我的user.rb模型中有这个:

has_many :crew_users
has_many :crews, :through => :crew_users
has_many :outings, :through => :crews


当我尝试这样做时:

>> Users.find(1).outings


我收到此错误:

ActiveRecord::StatementInvalid: Mysql::Error: Unknown column 'crews.user_id'
in 'where clause': SELECT `outings`.* FROM `outings`  INNER JOIN `crews` ON
`outings`.id = `crews`.outing_id    WHERE ((`crews`.user_id = 1))


任何人有想法吗?就像我说的那样,我的目标是让用户从当前时间开始下一次郊游,所以这样做可能会更好!

最佳答案

如果无法通过过滤郊游记录来执行双:through,则可以尝试扭转这种情况。 SQL看起来像这样:

SELECT outings.id FROM outings
  LEFT JOIN crews ON crews.id=outings.crew_id
  LEFT JOIN crews_users ON crews_users.crew_id=crews.id
  WHERE crews_users.user_id=? AND start_time>=NOW()
  ORDER BY created_at
  LIMIT 1


快速而肮脏的方法是运行此代码并提取所需的outing_id值,然后使用该值调用Outing.find

关于ruby-on-rails - Rails关系问题-查找用户的下一个郊游,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3409012/

10-11 22:55