Ruby on rails RubyonRails在活动关系中出错,命名错误:未定义的方法';方法名称';对于#<;ActiveRecord::关系:0x00000002ab5908>;

Ruby on rails RubyonRails在活动关系中出错,命名错误:未定义的方法';方法名称';对于#<;ActiveRecord::关系:0x00000002ab5908>;,ruby-on-rails,rails-activerecord,model-associations,active-relation,Ruby On Rails,Rails Activerecord,Model Associations,Active Relation,下面是两个模型的代码,它们有1对1的关联 class User < ActiveRecord::Base has_one :e_user validates_presence_of :first_name validates_presence_of :last_name validates :password, presence: true, :length => { :minimum => 6} validates_uniqueness_of :email

下面是两个模型的代码,它们有1对1的关联

class User < ActiveRecord::Base
  has_one :e_user
  validates_presence_of :first_name
  validates_presence_of :last_name
  validates :password, presence: true, :length => { :minimum => 6}
  validates_uniqueness_of :email, :message => ": This email is already registered!"
  validates_presence_of :email  
end
我在a中获得一个用户。现在,我想获取与a关联的e_用户(如果有的话,它应该返回它或返回null),但当我在控制台中键入a.EUser时,会收到错误消息,错误为

NoMethodError: undefined method `EUser' for  #<ActiveRecord::Relation:0x00000002ab5908>from /home/faraz/.rvm/gems/ruby-1.9.3-p448/gems/activerecord-3.1.1/lib/active_record/relation.rb:459:in `method_missing'
from (irb):3
from /home/faraz/.rvm/gems/ruby-1.9.3-p448/gems/railties-3.1.1/lib/rails/commands/console.rb:45:in `start'
from /home/faraz/.rvm/gems/ruby-1.9.3-p448/gems/railties-3.1.1/lib/rails/commands/console.rb:8:in `start'
from /home/faraz/.rvm/gems/ruby-1.9.3-p448/gems/railties-3.1.1/lib/rails/commands.rb:40:in `<top (required)>'
from script/rails:6:in `require'
from script/rails:6:in `<main>'
NoMethodError:from/home/faraz/.rvm/gems/ruby-1.9.3-p448/gems/activerecord-3.1.1/lib/active\u record/relation的未定义方法“EUser”。rb:459:in“method\u missing”
来自(irb):3
from/home/faraz/.rvm/gems/ruby-1.9.3-p448/gems/railties-3.1.1/lib/rails/commands/console.rb:45:in'start'
from/home/faraz/.rvm/gems/ruby-1.9.3-p448/gems/railties-3.1.1/lib/rails/commands/console.rb:8:in'start'
from/home/faraz/.rvm/gems/ruby-1.9.3-p448/gems/railties-3.1.1/lib/rails/commands.rb:40:in`'
来自脚本/rails:6:in'require'
来自脚本/rails:6:in`'

关于

您是否与a.e\u用户

class User < ActiveRecord::Base

   has_one :e_user

end

class EUser < ActiveRecord::Base

 belongs_to :user

end

a= User.find(1)

您是否与a.e_用户进行了检查

class User < ActiveRecord::Base

   has_one :e_user

end

class EUser < ActiveRecord::Base

 belongs_to :user

end

a= User.find(1)

首先,您声明
User
有一个:e\u User
。因此,正确的关系查找是:

first_user = User.first
first_user.e_user
其次,
where
ActiveRecord方法返回一个
ActiveRecord::Relation
对象类型。您需要的是
User
对象本身。相反,请使用
查找

a = User.find(1)
a.e_user
解释
where
方法返回一个
ActiveRecord::Relation
对象,该对象包含符合类似数组结构条件的所有类对象。但是,即使
其中
仅返回一条记录,该记录仍将包含在类似数组的结构中;在访问
ActiveRecord::Relation
中的对象之前,无法访问检索到的类上的任何实例方法

另一方面,
find
,返回满足指定条件的第一个对象本身(默认情况下,ActiveRecord与对象
id
匹配)。因此,
find
方法返回的任何对象都具有完整的实用性,并可用于为这些类对象定义的实例方法和属性:

find_user = User.find(1)
where_user = User.where(:id => 1)

find_user.class
#=> User
where_user.class
#=> ActiveRecord::Relation

find_user == where_user
#=> false

find_user == where_user.first
#=> true

首先,您声明
User
有一个:e\u User
。因此,正确的关系查找是:

first_user = User.first
first_user.e_user
其次,
where
ActiveRecord方法返回一个
ActiveRecord::Relation
对象类型。您需要的是
User
对象本身。相反,请使用
查找

a = User.find(1)
a.e_user
解释
where
方法返回一个
ActiveRecord::Relation
对象,该对象包含符合类似数组结构条件的所有类对象。但是,即使
其中
仅返回一条记录,该记录仍将包含在类似数组的结构中;在访问
ActiveRecord::Relation
中的对象之前,无法访问检索到的类上的任何实例方法

另一方面,
find
,返回满足指定条件的第一个对象本身(默认情况下,ActiveRecord与对象
id
匹配)。因此,
find
方法返回的任何对象都具有完整的实用性,并可用于为这些类对象定义的实例方法和属性:

find_user = User.find(1)
where_user = User.where(:id => 1)

find_user.class
#=> User
where_user.class
#=> ActiveRecord::Relation

find_user == where_user
#=> false

find_user == where_user.first
#=> true

尝试使用
find
方法,而不是
where
。尝试使用
find
方法,而不是
where
。检查类EUser中的关联,并按如下方式更改:)检查类EUser中的关联,并按如下方式更改:)