Rails在枚举器中找到值

时间:2011-11-11 16:54:54

标签: ruby-on-rails ruby

好的,所以我有@categories这个对象基本上是:

@categories = Category.all

由控制器传入页面。所以从这里我想要获取ID为12的记录的类别字段(从另一个名为currentCatId的变量中剔除)。所以我这样做:

currentCatId = 12
currentCat = @categories.find(currentCatId)

错了,这给了我所有类别!哪个我无法理解。所以环顾四周我发现我可以尝试这样的事情:

currentCat = @categories.find { |cat| cat.id = currentCatId }.category

这至少会检索我想要的字段,但不会检索ID为12的类别,而是检索第一个类别。

我在这里疯了,无法理解为什么instanced对象有.find方法(似乎不起作用)但不是.where方法。

我做错了什么以及正确的做法是什么?

3 个答案:

答案 0 :(得分:1)

使用find { ... }的示例几乎是正确的,但是您有一个错误:当您需要使用=时,您正在使用==来测试相等性。单个等号是总是赋值。

currentCat = @categories.find { |cat| cat.id == currentCatId }.category

答案 1 :(得分:1)

Category.all是一个数组,而不是ActiveRecord :: Relation。

您可以在Rails控制台上尝试:

# Returns an Array
Category.all.class 

# Returns an ActiveRecord::Relation
Category.where(:id => 1)

ActiveRecord :: Relation是给你.where的类。 数组,如ActiveRecord :: Base,有.find,这可能就是你迷茫的原因。

答案 2 :(得分:1)

正如 meagar 所说,您应该使用==进行比较。但无论如何,简单的O(1)发现有什么问题:

@current_category = Category.find(current_category_id)