0

假设我有 2 个模型:1. user 和 2. userProfile
我们在 2 个模型之间存在一对一的关系。
然后,我想创建用户控制器并创建用户,其中包含用户名和密码等字段以及用户配置文件中的地址、手机号码等其他详细信息。
user_id 是 user_profile 中的外键
然后我在用户中创建了 new.html.erb 视图,以相同的形式呈现上述所有字段。然后我如何将数据分别保存在两个不同的表 user 和 userprofile 中。

我尝试的是
1. has_one :user_profile in user.rb和 belongs_to :user 在user_profile.rb
2.accept_nested_attributes_for :user_profile in user.rb user_controller:


     定义创建
       @user = User.new(params[:user])
       如果@user.save
          @userprofile = @user.create_user_profile(params[:user_profile])
               redirect_to root_url, :notice => "已注册!"     
       别的
          渲染“新”
        结尾
      结尾

 

3. 然后我得到错误,唯一的用户 ID 是在 user_profile 中创建的,并且更新运行以使 user_id 为零,这是不可能的!所以引发错误:
未知列“user_profiles”。在'where子句'中:更新`user_profile`
SET `user_id` = NULL WHERE `user_profiles`.`` 是 NULL
那么出了什么问题以及如何解决这个问题?

4

1 回答 1

0

如果您正在使用,accepts_nested_fields_for那么您不需要自己管理保存 UserProfile 记录。ActiveRecord 将为您处理它。

要使其正常工作,您需要:

  1. 确保你有accepts_nested_fields_for :user_profile你的用户模型
  2. 更新您的 app/views/users/_form.html.erb 以包含 UserProfile 的表单元素,例如:

    <%= f.fields_for :user_profile, @user.user_profile do |profile_form| %>
    <%= profile_form.text_field :address %>
    <%= profile_form.text_field :mobile_number %>
    <% end %>
    
  3. 更新您UsersController#new为用户构建 UserProfile 的操作,例如

    def new
      @user = User.new
      @user.build_user_profile
      (...)
    end
    

有关更多信息,请参阅涵盖 Active Record 嵌套属性的 Rails API 文档

于 2012-08-09T10:40:21.267 回答