Rails:在 Rails 中使用带有 has_one 关联的构建

发布于 2024-08-25 07:04:24 字数 672 浏览 16 评论 0原文

在此示例中,我创建一个没有个人资料用户,然后为该用户创建一个个人资料。我尝试使用带有 has_one 关联的构建,但失败了。我看到这个工作的唯一方法是使用has_many用户 应该最多只有一个个人资料

我一直在尝试这个。我有:

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 关联?

In this example, I create a user with no profile, then later on create a profile for that user. I tried using build with a has_one association but that blew up. The only way I see this working is using has_many. The user is supposed to only have at most one profile.

I have been trying this. I have:

class User < ActiveRecord::Base
  has_one :profile
end

class Profile < ActiveRecord::Base
  belongs_to :user
end

But when I do:

user.build_profile 

I get the error:

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

Is there a way in rails to have 0 or 1 association?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

绿光 2024-09-01 07:04:24

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 关联 文档 了解更多详细信息。

The build method signature is different for has_one and has_many associations.

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

The build syntax for has_many association:

user.messages.build

The build syntax for has_one association:

user.build_profile  # this will work

user.profile.build  # this will throw error

Read the has_one association documentation for more details.

小情绪 2024-09-01 07:04:24

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

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

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

协会基础知识

Take a good look at the error message. It is telling you that you do not have required column user_id in the profile table.
Setting the relationships in the model is only part of the answer.

You also need to create a migration that adds the user_id column to the profile table.
Rails expects this to be there and if it is not you cannot access the profile.

For more information please take a look at this link:

Association Basics

踏月而来 2024-09-01 07:04:24

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

ModelName.new( :owner => @owner )

@owner.model_names.build

It should be a has_one. If build isn't working, you can just use new:

ModelName.new( :owner => @owner )

is the same as

@owner.model_names.build
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文