【发布时间】:2015-06-09 10:46:36
【问题描述】:
我的模特:
class CountryVisit < ActiveRecord::Base
belongs_to :country
belongs_to :user
validates :country, uniqueness: { scope: user, message: 'already visited' }
end
class User < ActiveRecord::Base
has_many :country_visits
...
end
class Country < ActiveRecord::Base
has_many :country_visits
...
end
我希望每个国家/地区都有一个虚拟属性,表明给定用户具有country_visit
Country.for(user)
这是我不完整的解决方案(如果我尝试对结果执行 .count,则会引发 ActiveRecord::StatementInvalid: SQLite3::SQLException):
def self.for(user_id)
Country
.select("countries.*, country_visits.id AS visited")
.joins(
"LEFT OUTER JOIN country_visits ON
country_visits.country_id = countries.code
AND country_visits.user_id = #{user_id}"
)
end
预期行为:
user = User.create
#with country visit
c1 = Country.create
cv1 = CountryVisit.create(country: c1, user: user)
#without country visit
c2 = Country.create
结果应该是:
countries = Country.for(user_id).order('created_at asc')
countries.first.visited # => true
countries.last.visited # => false
【问题讨论】:
-
我不明白你想从这个查询中得到什么结果?
-
@Fenec 我的错。更新了预期行为的问题
标签: ruby-on-rails ruby sqlite activerecord rails-activerecord