UserController中的ActiveRecord :: UnknownAttributeError #create

时间:2014-08-18 09:30:32

标签: ruby-on-rails activerecord ruby-on-rails-4

我已经开始学习rails了,为此我开始开发一个具有嵌套属性的运送应用程序。基本上我有UserBox之间的HABTM模型BoxKindBoxKind表。

用户模型

class User < ActiveRecord::Base
has_many :boxes
accepts_nested_attributes_for :boxes
end

Box Model

class Box < ActiveRecord::Base    
belongs_to :user, :foreign_key => "user_id"    
accepts_nested_attributes_for :user

has_and_belongs_to_many :kinds, join_table: :boxes_kinds    
accepts_nested_attributes_for :kinds
end

亲切型号

class Kind < ActiveRecord::Base
has_and_belongs_to_many :boxes, join_table: :boxes_kinds
end

当我尝试向数据库添加新记录时,我收到unknown attribute: box_id错误。这对我来说有点混乱,因此我在名为Box的{​​{1}}模型中添加了自定义主键。

我哪里错了?

更新由于@NitinVerma另外请求的是控制台日志:

ref_no

2 个答案:

答案 0 :(得分:3)

<强> HABTM

我认为问题是你的habtm表:

create_table "boxes_kinds", id: false, force: true do |t|
    t.integer "ref_no",  null: false
    t.integer "kind_id", null: false
end

Rails has_and_belongs_to_many表意味着包含每个关联表的foreign_key

enter image description here

您遇到的问题是,由于您的表的box_idref_no,因此Rails无法确定要保存值的列;因此调用你所看到的例外。

我建议您为association_foreign_key关联使用foreign_keyhas_and_belongs_to_many个参数:

#app/models/box.rb
Class Box < ActiveRecord::Base
   has_and_belongs_to_many :kinds, foreign_key: "ref_no"
end

#app/models/kind.rb
Class Kind < ActiveRecord::Base
   has_and_belongs_to_many :boxes, association_foreign_key: "ref_no"
end

答案 1 :(得分:0)

你必须改变boxes_kinds表。删除ref_no并添加box_id。因为连接表保存了像#{model_name}_id这样的关联表的id列。您还需要从用户许可参数中删除id列或者说父权限参数。 id列只需要子模型。此外,如果您想在编辑父级时销毁任何关联的子对象,也可以选择添加_destory以允许参数。

def user_box_params

    params.require(:user).permit(:name, :email, :address, :postcode, :tel_no, :state, 

     boxes_attributes: [:id, :ref_no, :quantity, :collected_at, :destination_country, :destination_country_address, :shipped, :shipped_at, :reached, :reached_at, _destroy,

     kinds_attributes: [:id, :big, :small, :odd, :trunck, _destroy]]) 
end