Rails: 在 ails 中使用带有 has_one 关联的 build

在本例中,我创建了一个没有 profileuser,然后为该用户创建了一个 profile。我尝试使用构建与 has_one关联,但它爆炸了。我认为唯一的工作方式是使用 has_manyuser应该最多只有一个 profile

我已经试过了,我试过了:

class User < ActiveRecord::Base
has_one :profile
end


class Profile < ActiveRecord::Base
belongs_to :user
end

但是当我这么做的时候:

user.build_profile

我得到了一个错误:

ActiveRecord::StatementInvalid: Mysql::Error: Unknown column 'profiles.user_id' in 'where clause': SELECT * FROM `profiles` WHERE (`profiles`.user_id = 4)  LIMIT 1

有没有一种方法在轨道有0或1的关联?

84187 次浏览

它应该是 has_one。如果 build不工作,你可以使用 new:

ModelName.new( :owner => @owner )

@owner.model_names.build

对于 has_onehas_many关联,build方法签名是不同的。

class User < ActiveRecord::Base
has_one :profile
has_many :messages
end

has_many关联的构建语法:

user.messages.build

has_one关联的构建语法:

user.build_profile  # this will work


user.profile.build  # this will throw error

阅读 has_one协会 文件了解更多细节。

仔细查看错误消息。它告诉您,您在 资料表中没有需要的列 user_id。 在模型中设置关系只是答案的一部分。

您还需要创建一个迁移,将 user_id列添加到配置文件表中。 Rails 希望这样做,如果没有,就不能访问这个概要文件。

欲了解更多信息,请看这个链接:

协会基础知识