在轨道 3 中的操作控制器中访问多个活动记录



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

我尝试的是
1. 在 user.rb 中has_one :user_profile 和在 user_profile.rb 中belongs_to :user
2. accepts_nested_attributes_for :user_profile 在用户.rb 中 user_controller:

定义创建       @user = User.new(params[:user])       如果@user保存          @userprofile = @user.create_user_profile(params[:user_profile])               redirect_to root_url, :通知 => "已注册!"           还          呈现"新"        结束      结束 

3.然后我收到错误,唯一的用户ID是在user_profile中创建的,并且还更新运行以使user_id nil,这不可能!所以引发错误:
"where"子句中的未知列"user_profiles.":更新"user_profile"设置"user_id"=空,其中"user_profiles"为空。
那么出了什么问题以及如何解决此问题?
如果您

使用的是accepts_nested_fields_for则无需自行管理保存用户配置文件记录。活动记录将为您处理它。

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

  1. 确保用户模型中有accepts_nested_fields_for :user_profile
  2. 更新您的应用程序/视图/用户/_form.html.erb 以包含用户配置文件的表单元素,例如:

    <%= 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操作以构建用户的用户配置文件,例如

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

有关更多信息,请参阅涵盖活动记录嵌套属性的 Rails API 文档。

相关内容

  • 没有找到相关文章

最新更新