Where方法if条件为false



如果条件为false,它返回空数组还是nil?例如:

@result=Result.where(:test_id=>test_id, :user_id => current_user.id).first

如果没有这样的test_id和user_id的结果。

我只是不明白,我想第一个选项,但结果是零。

您的变量由两部分组成,第一部分返回ActiveRecord::Relation(本质上是数组(:

 @result_array = Result.where(:test_id=>test_id, :user_id => current_user.id)
 > @result_array.class
  => ActiveRecord::Relation

如果没有结果,则为空(显示为[](

第二个返回第一个项,(如果是空数组(nil:

> (1..10).first
 => 1
> [].first
 => nil
@first_or_nil = @result = @result_array.first

我建议在rails控制台中键入这些类型的命令,看看结果如何。

对于您的问题,您可以使用以下代码。

@result=Result.where(:test_id=>test_id).(:user_id => current_user.id).first

Thy使用#bang with方法。第一个!例如:

@result=Result.where(:test_id=>test_id, :user_id => current_user.id).first!

它应该返回ruby将在表"results"中遇到的第一个元素
这应该会有所帮助。

您也可以使用这个简单的查询。。。

@result=current_user.results.find_by_test_id(:test_id)

最新更新