好的,所以我有@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方法。
我做错了什么以及正确的做法是什么?
答案 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)