-1

外部キーの関連付けを使用して、テーブル A を参照するテーブル B にデータを挿入しようとしています。
これが私のコードです。

models.rb

class StudentStatusReport < ActiveRecord::Base
attr_accessible :student_id, :mark
belongs_to :student_details, :class_name => "StudentDetails", :foreign_key => "student_id"
end

class StudentDetails < ActiveRecord::Base
attr_accessible :student_id, :name
has_many :student_status_reports
end  

および Migrations.rb は次のとおりです。

 class CreateStudentDetails < ActiveRecord::Migration
  def change
  create_table :student_details, {:id => false} do |t|
    t.string :student_id
    t.string :name
    t.timestamps
  end
  execute "ALTER TABLE student_details ADD PRIMARY KEY (reg_no);"
 end
end


class CreateStudentStatusReports < ActiveRecord::Migration
  def change
    create_table :student_status_reports do |t|
     t.string  :student_id
     t.integer :mark
     t.timestamps
   end
 end
end    

現在、次のクエリを使用して、Rails コンソールの StudentStatusReport モデルにデータを挿入しています。

e = StudentDetails.find("UG10001")
f = e.student_status_reports.create!(:mark => 40)

しかし、コンソールに次のエラーが表示されます -

ActiveRecord::UnknownAttributeError: unknown attribute: student_details_id  

これに関して可能な解決策は何ですか?
モデルとデータベースで外部キーと主キーを既に定義していますが、どこが間違っているのかわかりません。Tx..!

4

1 に答える 1

1

問題は外部キーだと思います。モデルでは、テーブルの列StudentStatusReportとして定義していますが、モデルでは (暗黙的に) として定義されています(明示的に定義しない限り、Rails はアソシエーション名 + であると推測します)。したがって、parent_model で正しいforeign_key を指定することにより、エラーを修正する必要があります。student_idstudent_status_reportsStudentDetailsstudent_details_id_id

class StudentStatusReport < ActiveRecord::Base
  attr_accessible :student_id, :mark
  belongs_to :student_details, :class_name => "StudentDetails", :foreign_key => "student_id"
end

class StudentDetails < ActiveRecord::Base
  attr_accessible :student_id, :name
  has_many :student_status_reports, :foreign_key => "student_id"
end

表のstudent_idstudent_detailsは実際には関連付けで使用されていないため、関連付けをより明確にするために削除することを検討してください。

最後に、通常、Rails のデフォルトの規則 (整数自動インクリメントの主キーという名前id、単数形のモデル名) に固執することをお勧めします。しかし、時々あなたはできない... :S

于 2013-02-15T19:16:18.017 に答える