2

对于大多数人来说,这可能很简单,但是我还没有真正写过许多具有多个参数的范围,单个参数很好,只是在这里不确定。我正在尝试创建一个范围,上面写着“给我当前用户已签出的所有书籍”

所以我在我的书本模型中提出了这个

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)谢谢

4

3 回答 3

4

我会这样做:

scope :checked_out_book, lambda {|user| where(:user_id => user.id, :checked_out => true) }
于 2013-01-10T10:46:53.443 回答
1
scope :checked_out_book, lambda {|user| where(:user_id => user.id, :checked_out => true) }
于 2013-01-10T11:06:58.790 回答
1

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)

现在自从Userhas_many以来Books,我可能会选择这样的东西,而不会打扰范围。如果你想要一个类似方法的方法,你总是可以创建一个返回Relation对象的方法。

current_user.books.where(checked_out: true)

或者

def checked_out_books
  books.where(checked_out: true)
end
# current_user.checked_out_books
于 2013-01-10T11:18:54.153 回答