我无法通过第3个模型更新与当前模型相关的嵌套属性。
聚焦模型:简介
class Profile < ApplicationRecord
belongs_to :user
has_many :phone_numbers
##Set nested attributes
accepts_nested_attributes_for :phone_numbers, reject_if: :all_blank, allow_destroy: true
Netsted属性:PhoneNumber
class PhoneNumber < ApplicationRecord
belongs_to :profile
end
第三种模式:用户
class User < ApplicationRecord
has_one :profile
end
在数据库中,他们的关系是 profile.user_id = user.id,phone_number.user_id = user.id
问题:如何更新个人资料时更新电话号码?
我试过
<%= form_for @profile, url: {action: "update"} do |f| %>
...
<%= f.fields_for :phone_numbers do |ff| %>
...
并收到错误消息:
Mysql2 ::错误:'where'中的未知列'phone_numbers.profile_id' 子句':SELECT
phone_numbers
。* FROMphone_numbers
WHEREphone_numbers
。profile_id
= 1
答案 0 :(得分:1)
错误非常明确且充满了号召性用语:
profile_id
列添加到phone_numbers
表,以反映Profile
和PhoneNumber
模型之间的关联。答案 1 :(得分:1)
要将profile_id
列添加到phone_numbers
表格,您需要迁移。这是使用rails命令执行的,如下所示:
rails generate migration AddProfileRefToPhoneNumbers profile:references
rake db:migrate
这将解决您的错误问题。我还可以看到你遇到问题的路线:
class User < ApplicationRecord
has_one :profile
end
class Profile < ApplicationRecord
belongs_to :account
您的个人资料为belongs_to帐户,而非用户。您希望将帐户替换为user或将您的外键替换为account_id,并将该行更改为:
belongs_to :account, class_name: 'User'