如何在我编写的自定义方法中搜索我的数据库中返回true的所有用户? - Rails3

时间:2011-07-12 04:39:16

标签: ruby-on-rails-3

这是我的User对象及其属性:

ruby-1.9.2-p0 > User
 => User(id: integer, email: string, encrypted_password: string, password_salt: string, reset_password_token: string, remember_token: string, remember_created_at: datetime, sign_in_count: integer, current_sign_in_at: datetime, last_sign_in_at: datetime, current_sign_in_ip: string, last_sign_in_ip: string, username: string, first_name: string, last_name: string, created_at: datetime, updated_at: datetime, invitation_token: string, invitation_sent_at: datetime, plan_id: integer, current_state: string, confirmation_token: string, confirmed_at: datetime, confirmation_sent_at: datetime, space_used: integer, failed_attempts: integer, unlock_token: string, locked_at: datetime, trial_end_date: date, active_subscription: boolean) 

我的User.rb模型中定义的自定义方法是:

def trial_will_almost_end?
  if (self.trial_end_date - Date.today <= 3)
    return true
  else
    return false
  end
end

基本上我想要做的就是搜索trial_will_almost_end返回true的所有用户。

我还想搜索为此方法返回true的所有用户:

def has_trial_expired?
   if (self.trial_end_date <= Date.today)
    return true
   else
    return false
   end
end

这一切都要在Rails 3中完成。

感谢。

1 个答案:

答案 0 :(得分:1)

ActiveRecord是一个数据库查询接口,因此基本上每个方法最后都会分解为SQL。在您的情况下,您希望在数据库中执行ruby函数,除非您获取记录然后单独循环它们,否则这是不可能的。

但是你可以使用sql“where”子句获取你的记录(注意:可能不是正确/最有效的语法):

User.find :all, :conditions => ["TO_DAYS(trial_end_date) - TO_DAYS(NOW()) <= 3"]