我正试图将数据插入表B中,该表使用外键关联引用表a
这是我的密码。
型号.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 Model。
e = StudentDetails.find("UG10001")
f = e.student_status_reports.create!(:mark => 40)
但我在控制台上收到以下错误——
ActiveRecord::UnknownAttributeError: unknown attribute: student_details_id
对此,可能的解决方案是什么
我已经在模型和数据库中定义了外键和主键,我不知道哪里出了问题。Tx。。!
我认为问题出在您的外键上。在StudentStatusReport
模型中,您将其定义为student_status_reports
表中的student_id
列,但在StudentDetails
模型中,它(隐式)定义为student_details_id
(Rails猜测它是关联名称+_id
,除非您明确定义它)。因此,应该通过在parent_mode中指定正确的foreign_key来修复错误:
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_details
表中的student_id
列实际上并没有在关联中使用,因此您可能会考虑将其删除以使关联更加清晰。
最后,坚持Rails中的默认约定(名为id
的整数自动递增主键,单数模型名称)通常是个好主意。但有时你就是不能…:S