Ruby on rails 如何解决rails控制台中的方法缺失错误

Ruby on rails 如何解决rails控制台中的方法缺失错误,ruby-on-rails,ruby-on-rails-3,Ruby On Rails,Ruby On Rails 3,我有一个菜品模型,价格如下 class Dish < ActiveRecord::Base has_one :price_deal end class Dish < ActiveRecord::Base belongs_to :dish end classdish # 1.9.2p290:131>pd.折扣百分比 => 20.0 我得到了预期的结果 但当我试图得到这样的值时 1.9.2p290 :132 > pd1 = PriceDeal.where(:dis

我有一个菜品模型,价格如下

class Dish < ActiveRecord::Base
  has_one :price_deal
end

class Dish < ActiveRecord::Base
  belongs_to :dish
end
classdish
在rails控制台中,我希望像这样检索折扣百分比值

1.9.2p290 :130 > pd=PriceDeal.find(17)
 => #<PriceDeal id: 17, name: "deal1", description: "my deal1", discountPercent: 20.0, discountCash: nil, dish_id: 2, created_at: "2012-03-22 07:42:08", updated_at: "2012-04-16 11:16:49"> 

1.9.2p290 :131 > pd.discountPercent
 => 20.0 
1.9.2p290:130>pd=PriceDeal.find(17)
=> # 
1.9.2p290:131>pd.折扣百分比
=> 20.0 
我得到了预期的结果

但当我试图得到这样的值时

1.9.2p290 :132 > pd1 = PriceDeal.where(:dish_id => 2)
 => [#<PriceDeal id: 17, name: "deal1", description: "my deal1", discountPercent: 20.0, discountCash: nil, dish_id: 2, created_at: "2012-03-22 07:42:08", updated_at: "2012-04-16 11:16:49">] 

1.9.2p290 :133 > pd1.discountPercent

NoMethodError: undefined method `discountPercent' for #<ActiveRecord::Relation:0xa134958>
    from /home/ragunathjawahar/.rvm/gems/ruby-1.9.2-p290@rails3tutorial/gems/activerecord-3.0.11/lib/active_record/relation.rb:374:in `method_missing'
    from (irb):133
    from /home/ragunathjawahar/.rvm/gems/ruby-1.9.2-p290@rails3tutorial/gems/railties-3.0.11/lib/rails/commands/console.rb:44:in `start'
    from /home/ragunathjawahar/.rvm/gems/ruby-1.9.2-p290@rails3tutorial/gems/railties-3.0.11/lib/rails/commands/console.rb:8:in `start'
    from /home/ragunathjawahar/.rvm/gems/ruby-1.9.2-p290@rails3tutorial/gems/railties-3.0.11/lib/rails/commands.rb:23:in `<top (required)>'
    from script/rails:6:in `require'
    from script/rails:6:in `<main>'
1.9.2p290:132>pd1=PriceDeal.where(:dish\u id=>2)
=> [#] 
1.9.2p290:133>pd1.5折扣率
NoMethodError:未定义的方法“折扣百分比”#
from/home/ragunahjawahar/.rvm/gems/ruby-1.9.2-p290@rails3tutorial/gems/activerecord-3.0.11/lib/active\u record/relation.rb:374:in'method\u missing'
发信人(irb):133
from/home/ragunahjawahar/.rvm/gems/ruby-1.9.2-p290@rails3tutorial/gems/railties-3.0.11/lib/rails/commands/console.rb:44:in'start'
from/home/ragunahjawahar/.rvm/gems/ruby-1.9.2-p290@rails3tutorial/gems/railties-3.0.11/lib/rails/commands/console.rb:8:in'start'
from/home/ragunahjawahar/.rvm/gems/ruby-1.9.2-p290@rails3tutorial/gems/railties-3.0.11/lib/rails/commands.rb:23:in`'
来自脚本/rails:6:in'require'
来自脚本/rails:6:in`'
我出错了

如何从pd1中获取折扣百分比的值


谢谢。

发生这种情况的原因是,当您使用
where
时,返回的不是一个类型为
PriceDeal
的对象,而是一个类型为
ActiveRecord::Relation
的对象,无论出于何种目的,它都是一个数组

注意你是如何得到的:

[#<PriceDeal id: 17, name: "deal1", ... >]
where
方法返回数组的原因是可以返回多个项。想象一下:

PriceDeal.where("discountPercent >= 0")

你可能会从中得到很多记录。

发生这种情况的原因是,当你使用
where
时,你得到的不是一个类型为
PriceDeal
的对象,而是一个类型为
ActiveRecord::Relation
的对象,无论出于何种目的,它都是一个数组

注意你是如何得到的:

[#<PriceDeal id: 17, name: "deal1", ... >]
where
方法返回数组的原因是可以返回多个项。想象一下:

PriceDeal.where("discountPercent >= 0")
你可能会从中得到很多记录。

pd=PriceDeal.find(17)

它将只返回一个特定的列。因此您不会得到任何方法错误

当您使用Modelname.where(“conditions”)。结果将是array.so,您将不会得到任何方法错误。因为您的方法不存在于array中。

pd=PriceDeal.find(17)

它将只返回一个特定的列。因此您不会得到任何方法错误


当您使用Modelname.where(“conditions”)。结果将是array。因此您不会得到任何方法错误。因为您的方法不存在于array中。

是的,这可能是一种更好的放置方式,因为关系首先查找数组方法,然后再查找类方法。是的,这可能是一种更好的放置方式,因为关系首先查找数组方法,然后查找类方法。