这对你们大多数人来说可能很简单,但是我没有真正写过很多有多个参数的作用域,单个参数也很好,只是这里不确定。我正在尝试创建一个作用域,它说"给我当前用户已借出的所有书籍"
我在我的书中提出了这个模型
scope :checked_out_book, lambda{|user| { :conditions => { :user_id => current_user.id, :checked_out => true } }
之前没有使用lambda所以不确定我是否正确使用它,无论哪种方式我都得到错误
syntax error, unexpected keyword_end, expecting '}'
谁能给我指一下正确的方向
编辑已将作用域更改为
scope :checked_out_book, lambda {|user| where(:user_id => user.id, :checked_out => true) }
但是现在我得到
参数数错误(0为1)由于
我想这样做:
scope :checked_out_book, lambda {|user| where(:user_id => user.id, :checked_out => true) }
scope :checked_out_book, lambda {|user| where(:user_id => user.id, :checked_out => true) }
在Book
模型上,作用域应该是这样的:
scope :checked_out_book, lambda {|user| where(:user_id => user.id, :checked_out => true) }
或Ruby 1.9
scope :checked_out_book, ->(user) { where(user_id: user.id, checked_out: true) }
你可以这样称呼它:
Book.checked_out_book(current_user)
现在,因为User
有许多Books
,我可能会这样做,不打扰范围。如果你想要一个类似方法的方法,你总是可以创建一个返回Relation
对象的方法。
current_user.books.where(checked_out: true)
或
def checked_out_books
books.where(checked_out: true)
end
# current_user.checked_out_books