152

在此示例中,我创建了一个userno profile,然后profile为该用户创建了一个。我尝试将 build 与has_one关联一起使用,但结果失败了。我看到这项工作的唯一方法是使用has_many. user应该最多只有一个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

Rails 中有没有办法拥有 0 或 1 个关联?

4

3 回答 3

380

和关联的build方法签名是不同的 。has_onehas_many

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关联文档以获取更多详细信息。

于 2010-03-18T21:00:38.110 回答
19

仔细查看错误消息。它告诉您配置文件表user_id中没有必填列。在模型中设置关系只是答案的一部分。

您还需要创建将user_id列添加到配置文件表的迁移。Rails 期望它存在,如果不是,您将无法访问配置文件。

有关更多信息,请查看此链接:

协会基础

于 2010-03-19T04:44:06.360 回答
-14

它应该是一个has_one. 如果build不起作用,您可以使用new

ModelName.new( :owner => @owner )

是相同的

@owner.model_names.build
于 2010-03-18T20:45:13.997 回答