我有奇怪的问题,我有模型的表产品
class Product < ActiveRecord::Base
attr_accessible :id, :category_id, :name, :barcode, :price, ...
但是当我运行 rails c 时,我无法访问属性。
product = Product.where(“barcode ='B0000000008'”)
Product Load (22.5ms) EXEC sp_executesql N'SELECT [products].* FROM [products] WHERE (barcode=''B0000000008'')'
=> [#<Product id: 8, category_id: 2, name: "Aplikovaná boj. umění (1 hodina)", barcode: "P0000000008", price: #<BigDecimal:362f9c8,'0.95E2',9(36)>, ... ]
>> product.name
=> "Product"
>> product.class
=> ActiveRecord::Relation
>> product.barcode
!! #<NoMethodError: undefined method `barcode' for #<ActiveRecord::Relation:0x00000003a354c8>>
>> product.id
!! #<NoMethodError: undefined method `id' for #<ActiveRecord::Relation:0x00000003a354c8>>
>> product.price
!! #<NoMethodError: undefined method `price' for #<ActiveRecord::Relation:0x00000003a354c8>>
但我能够运行
>> product = Product.new
>> product.name = "xx"
=> "xx"
>> product.class
=> Product(id: integer, ...)
Product class和ActiveRecord :: Relation类之间有什么区别?我如何从哪里获得Product类方法?谢谢
答案 0 :(得分:2)
首先,where
返回ActiveRecord关系。简单来说,它只是未执行的Active Record查询。您可以将“order”,另一个“where”,“join”等查询链接到此,并且只有当您想要访问此查询返回的记录时才会对查询进行评估。
所以你做的是
ActiveRecord::Relation.barcode
自然会失败。
无论如何,只需执行product = Product.where("barcode='B0000000008'").first
,您就可以获得可以调用barcode