User has_many products
Product belongs_to user
用户的表中还有一个active_account和created_at列。
我正在尝试将其转换为查询:
'产品所属的用户拥有有效帐户或少于25天的产品是什么?'
这是我到目前为止(不确定如何在不到25天的时间内添加OR):
Product.joins(:user).where(users: {active_account: true})
答案 0 :(得分:0)
更好的方法是使用Arel
users = Arel::Table.new(:users)
products = Arel::Table.new(:products)
users
.join(products,Arel::Nodes::InnerJoin)
.on(users[:id].eq(products[:user_id]))
.where(users[:active_account].eq(true).or(users[:created_at].lt(25.days.ago))
答案 1 :(得分:0)
试试这个:
Product.joins(:user).where("users.active_account = ? OR users.created_at >= '#{(Time.now - 25.days).utc.iso8601}'", true)
答案 2 :(得分:0)
我会从这样的事情开始:
Product.joins(:user).where(
"users.active_account = :account_active OR users.created_at >= :max_age",
{ :account_active => true, :max_age => 25.days.ago }
)
在下一步中,我会将该逻辑移动到范围和merge范围内:
# in user.rb
scope :active, ->{
where("users.active_account = :account_active OR users.created_at >= :max_age", { :account_active => true, :max_age => 25.days.ago })
}
# in product.rb
scope :with_active_user, ->{ joins(:user).merge(User.active) }
什么允许你这样使用它:
Product.with_active_user