0

User と Description の 2 つのモデルがあります。すべてのユーザーには 1 つの説明があり、すべての説明はユーザーに属します。説明を作成するフォームを作成しましたが、ビューで説明データを取得しようとすると、取得できませんでした。データベースを確認しましたが、説明テーブルの user_id 列が更新されていません。これは、has_one/belongs_to 関係で自動的に発生するはずだと思いました。user_id フィールドにユーザーの ID が自動的に入力されるようにするにはどうすればよいですか?

ここに私のユーザーモデルがあります:

class User < ActiveRecord::Base
   has_one :description
   accepts_nested_attributes_for :description
end

これが私の説明モデルです::

class Description < ActiveRecord::Base
    belongs_to :user
end

ここに私の記述コントローラがあります:

class DescriptionsController < ApplicationController

        def new
            @description = Description.new
            @current = current_user.id
        end
        def create
            #Description.create(description_params)
            @description = Description.create(description_params)
            redirect_to student_path
        end
        def index
        end

    private

    def description_params
      params.require(:description).permit(:skills, :looking_for, :my_idea, :user_id)
    end
end

そして、ここにビューがあります:

<div class="span6 offset3 text-center">
<h1>Edit your information</h1>

    <%= simple_form_for @description do |f| %>
        <%= f.input :skills %>
        <%= f.input :looking_for, :label => 'What help do you need?' %>
        <%= f.input :my_idea %>
        <%= f.input :user_id, :as => :hidden, :value => @current %>
        <%= f.submit "Save", :class => "btn btn-primary btn-large" %>
    <% end %>
</div>

受け入れられたパラメーターから user_id を削除しようとしましたが、何もしません。また、非表示フィールドを使用して user_id を渡そうとしましたが、これは機能しませんでしたが、それが必要であるとは思わず、問題を解決する正しい方法ではないと思います。

4

1 に答える 1

1

を使用している場合、モデルのフォームの一部としてモデルaccepts_nested_attributes_forの属性を送信するという考え方です。それはあなたがここでやっていることではないようです。DescriptionUser

それをしたくない場合は、その行を削除して、コントローラーで行う必要があります

current_user.build_description(description_params)

(または#create_description、一度にすべてを初期化/保存する場合に使用できます)。

例えば

def create
  @description = current_user.create_description(description_params)
  redirect_to student_path
end

これらのメソッドのドキュメントについては、 Active Record Associations ガイドを参照してください。has_one

于 2013-10-22T15:41:20.990 に答える