0

2 つのモデルがあるとします。1. user と 2. userProfile
で、2 つのモデル間に 1 対 1 の関係があります。
次に、Usercontroller を作成し、ユーザーのユーザー名やパスワードなどのフィールドと、ユーザープロファイルのアドレス、携帯電話番号などの詳細を使用してユーザーを作成したいと思います。
user_id は user_profile の外部キーです
次に、同じフォームで上記のすべてのフィールドをレンダリングするビューで、ユーザーに new.html.erb を作成しました。次に、2 つの異なるテーブル user と userprofile にそれぞれデータを保存する方法を説明します。

私が試したのは、
1. has_one :user_profile のuser.rbと belongs_to :user のuser_profile.rb
2. accept_nested_attributes_for :user_profile の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.次に、user_profile に唯一のユーザー ID が作成され、user_id を nil にするために実行を更新するというエラーが発生しました。エラーを発生させる:
不明な列「user_profiles」。「where 句」内: UPDATE `user_profile`
SET `user_id` = NULL WHERE `user_profiles`.`` IS NULL
何が問題で、これをトラブルシューティングする方法は?

4

1 に答える 1

0

を使用している場合はaccepts_nested_fields_for、UserProfile レコードの保存を自分で管理する必要はありません。ActiveRecord がそれを処理します。

これを機能させるには、次のことが必要です。

  1. accepts_nested_fields_for :user_profileUser モデルにあることを確認してください
  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 Nested Attributes をカバーする Rails API ドキュメントを参照してください。

于 2012-08-09T10:40:21.267 に答える