我在ActiveRecord对象中发现了一个意外的属性,我无法弄清楚它来自何处。请注意最终属性nil => nil
。
irb(main):001:0> p = ProgExit.new
=> #<ProgExit id: nil, Student_Bnum: nil, Program_ProgCode: nil, ExitCode_ExitCode: nil, ExitTerm: nil, ExitDate: nil, GPA: nil, GPA_last60: nil, RecommendDate: nil, Details: nil>
irb(main):002:0> p.attributes
=> {"id"=>nil, "Student_Bnum"=>nil, "Program_ProgCode"=>nil, "ExitCode_ExitCode"=>nil, "ExitTerm"=>nil, "ExitDate"=>nil, "GPA"=>nil, "GPA_last60"=>nil, "RecommendDate"=>nil, "Details"=>nil, nil=>nil}
另外两项注意事项:1)此问题不适用于任何其他型号。 2)这个模型在开发,测试和生产方面都是一样的。 3)模型不在任何地方使用attr_accessor。
知道这是从哪里来的吗?我包括相关的模型,虽然它迄今为止很小(仍在研究它)。
class ProgExit < ActiveRecord::Base
belongs_to :student, foreign_key: "Student_Bnum"
belongs_to :program, foreign_key: "Program_ProgCode"
belongs_to :exit_code, foreign_key: "ExitCode_ExitCode"
end
这是我的schema.rb
中的相关代码 create_table "prog_exits", id: false, force: true do |t|
t.integer "id", null: false
t.string "Student_Bnum", limit: 9, null: false
t.string "Program_ProgCode", limit: 45, null: false
t.string "ExitCode_ExitCode", limit: 45, null: false
t.integer "ExitTerm", null: false
t.datetime "ExitDate"
t.float "GPA", limit: 24
t.float "GPA_last60", limit: 24
t.datetime "RecommendDate"
t.text "Details"
end
add_index "prog_exits", ["ExitCode_ExitCode"], name: "fk_Exit_ExitCode1_idx", using: :btree
add_index "prog_exits", ["Program_ProgCode"], name: "fk_Exit__Program_idx", using: :btree
add_index "prog_exits", ["Student_Bnum"], name: "fk_Exit_Student1_idx", using: :btree
add_index "prog_exits", ["id"], name: "id", using: :btree
我不确定此处包含哪些其他代码,但如果还有其他可能是我可以分享的罪魁祸首。
答案 0 :(得分:1)
由于您已覆盖此表的默认主键(通过在id: false
语句中包含create_table
选项),因此您需要明确定义此模型的主键。
根据Rails docs,您可以在模型上使用self.primary_key=
来明确定义密钥。