Ruby on rails RubyonRails在活动关系中出错,命名错误:未定义的方法';方法名称';对于#<;ActiveRecord::关系:0x00000002ab5908>;
下面是两个模型的代码,它们有1对1的关联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
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中的关联,并按如下方式更改:)