Rails belongs_to返回nil类

时间:2013-07-19 14:54:52

标签: ruby-on-rails

我正在尝试将两个表相互链接

class Musers < ActiveRecord::Base
    # Email 
    # sid (student_id:integer)
    # isyk: boolean

    belongs_to :user, :foreign_key => "smail"
end

class Users < ActiveRecord::Base

    belongs_to :muser, :foreign_key => "email"

end

但是,

@user = Users.first
@user.muser returns nil

2 个答案:

答案 0 :(得分:1)

通过说:foreign_key => "smail",您告诉我Musersmail指向User模型的外键。很可能不是这种情况。

假设User模型的主键名为id,则应将user_id字段设为Muser,并将belongs_to :user, :foreign_key => "smail"更改为:

belongs_to :user

User模型上,您可以使用以下方法定义反向关系:

has_one :muser

此外,要遵循rails模型命名约定,您应将Users重命名为User,将Musers重命名为Muser

您应该详细了解belongs_tohas_one

另一方面,如果User模型实际上使用电子邮件作为主键,我强烈建议您更改它并添加自动递增主键。根据经验,应选择主键,使其永不改变。如果确实发生了变化,那么指向该主键的所有外键也必须改变。 如果您有特定原因,则应仅使用非自动递增主键。

有关选择主键的更多信息:How to choose my primary key?

答案 1 :(得分:1)

嗯,你不能告诉rails关联的类型,你实际上必须将关联设置为该类的实例。例如,制作新的muser不会自动将用户指定为belongs_to。你可以做点什么

u = User.new
u.muser = Muser.first
u.save

但是,我不确定你想用belongs_to - belongs_to关系完成什么,但是你应该知道你必须做的不仅仅是告诉它存在。