我有一个郊游表,它基本上保存了有关“郊游”的一些信息。然后,这些郊游有乘员组,这些乘员组具有用户(通过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/