如何获取有效或免费试用用户'产品? (产品belongs_to用户)

时间:2015-03-14 21:11:16

标签: ruby ruby-on-rails-4

User has_many products

Product belongs_to user

用户的表中还有一个active_account和created_at列。

我正在尝试将其转换为查询:

'产品所属的用户拥有有效帐户或少于25天的产品是什么?'

这是我到目前为止(不确定如何在不到25天的时间内添加OR):

Product.joins(:user).where(users: {active_account: true})

3 个答案:

答案 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