Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 作用域中的多个参数_Ruby On Rails_Ruby On Rails 3_Scopes - Fatal编程技术网

Ruby on rails 作用域中的多个参数

Ruby on rails 作用域中的多个参数,ruby-on-rails,ruby-on-rails-3,scopes,Ruby On Rails,Ruby On Rails 3,Scopes,这对你们中的大多数人来说可能很简单,但是我并没有真正编写过很多有多个参数的作用域,单参数也可以,只是这里不确定。我试图创建一个范围,上面写着“给我当前用户签出的所有书籍” 所以我在书中提出了这个模型 scope :checked_out_book, lambda{|user| { :conditions => { :user_id => current_user.id, :checked_out => true } } 以前没有使用过lambda,所以不确定我是否正确使用了它

这对你们中的大多数人来说可能很简单,但是我并没有真正编写过很多有多个参数的作用域,单参数也可以,只是这里不确定。我试图创建一个范围,上面写着“给我当前用户签出的所有书籍”

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

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) }
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) }
Book.checked_out_book(current_user)

模型上,范围应如下所示:

scope :checked_out_book, lambda {|user| where(:user_id => user.id, :checked_out => true) }
Book.checked_out_book(current_user)
或者对于Ruby 1.9

scope :checked_out_book, ->(user) { where(user_id: user.id, checked_out: true) }
你会这样称呼它:

scope :checked_out_book, lambda {|user| where(:user_id => user.id, :checked_out => true) }
Book.checked_out_book(current_user)
既然
用户
有很多
书籍
,我可能会选择这样的内容,而不必考虑范围。如果您想要一种类似方法的方法,您可以始终创建一个返回
关系
对象的方法

current_user.books.where(checked_out: true)


哦,是的,我错过了比赛{在用户之前,所以没有关闭它,如果您愿意,愚蠢的错误标记作为答案,如果您不介意解释一下lambda以及我们为什么在| | |中通过用户,将接受| |谢谢,这与您的问题无关,但您的范围是错误的,当前用户在这里不会给您任何信息,您应该使用给定的
用户
参数这是一个愚蠢的问题,但这就是为什么我要传递| user |,我现在不确定lambda的使用,谢谢你的回答,虽然最后解决了这个问题,丢失了),但是现在得到了错误数量的参数(0代表1)你必须传递一个用户到作用域:
Book.checked_Book(@some_user)
啊,对了,在我的例子中,当前用户的变化取决于谁登录了Hanks,这很好,有什么理由不在这里使用scopes更好吗?从教育的角度来看,我想这只是个人偏好的问题。在Rails 2中,它们允许您链接查询,但因为Rails 3中的几乎所有内容都是returns是一个关系对象,您也可以链接它,作用域成为编写类方法的一种奇怪方式。。。