我看到很多关于使用嵌套表单保存的东西,但是所有这些都与我的相反。客户信息belongs_to用户,但我想从客户信息更新用户电子邮件。现在视图正在运行,它只是没有保存。
我定义了以下关系:
class User < ActiveRecord::Base
has_one :customer_info, dependent: :destroy
accepts_nested_attributes_for :customer_info
end
class CustomerInfo < ActiveRecord::Base
belongs_to :user
attr_accessible :user, :email
accepts_nested_attributes_for :user
end
以下嵌套表格:
%h1 Editing customer_info
= form_for @customer_info, :validate => true do |f|
- if @customer_info.errors.any?
#error_explanation
%h2= "#{pluralize(@customer_info.errors.count, "error")} prohibited this user from being saved:"
%ul
- @customer_info.errors.full_messages.each do |msg|
%li= msg
%h2 Your Profile
= fields_for @user do |i|
.field
= i.label :email, 'Email'
= i.text_field :email
.field
= f.label :username, "Username"
= f.text_field :username
.actions
= f.submit 'Next'
答案 0 :(得分:1)
虽然以这种方式做你想做的事情是一种不寻常的方法,但我们需要知道控制器端的代码是什么。我假设你使用像这样的常用Rails脚手架
def update
if @customer_info.update_attributes params[:customer_info]
# the rest of the assumed code
end
end
如果是这样,请尝试向autosave
关系添加belongs_to :user
选项,以便在成功保存CustomerInfo后保存它,例如
belongs_to :user, autosave: true
答案 1 :(得分:0)
如果您使用accepts_nested_attributes_for和attr_accessible,则必须在attr_accessible行中包含user_attributes,否则您将无法更新用户记录
attr_accessible :user_attributes
accepts_nested_attributes_for :user
答案 2 :(得分:0)
事实证明它实际上是通过我一路上做的事来保存,我只是在使用设计,所以不要让我只是更改数据库中的电子邮件,我必须确认。
感谢Ahmad鼓励我查看控制台,以便更好地了解正在发生的事情。