2015-09-10 29 views
1

我有一個名爲Admin的Model對象的引用,它有一個名爲id的字段。對象屬性可以在puts行中訪問。我現在需要將該ID傳入ActiveRecord調用中以創建另一個對象(其作爲外鍵),如下所示,但會引發下面複製的異常(admin.id不會在Bill.create調用中拾取) :無法在ActiveRecord調用中指定值(Ruby,Sinatra,而不是Rails)

admin = Admin.find_by(email:email) 
puts "admin id #{admin.id}" # this gets printed with correct value 
bill = Bill.create(admin_id: admin.id, body: body) 

異常

/usr/local/rvm/gems/ruby-2.2.1/gems/activerecord-4.2.4/lib/active_record/attribute_assignment.rb:59:in `rescue in _assign_attribute': unknown attribute 'admin_id' for Bill. (ActiveRecord::UnknownAttributeError) 
     from /usr/local/rvm/gems/ruby-2.2.1/gems/activerecord-4.2.4/lib/active_record/attribute_assignment.rb:54:in `_assign_attribute' 
     from /usr/local/rvm/gems/ruby-2.2.1/gems/activerecord-4.2.4/lib/active_record/attribute_assignment.rb:41:in `block in assign_attributes' 
     from /usr/local/rvm/gems/ruby-2.2.1/gems/activerecord-4.2.4/lib/active_record/attribute_assignment.rb:35:in `each' 
     from /usr/local/rvm/gems/ruby-2.2.1/gems/activerecord-4.2.4/lib/active_record/attribute_assignment.rb:35:in `assign_attributes' 
     from /usr/local/rvm/gems/ruby-2.2.1/gems/activerecord-4.2.4/lib/active_record/core.rb:564:in `init_attributes' 
     from /usr/local/rvm/gems/ruby-2.2.1/gems/activerecord-4.2.4/lib/active_record/core.rb:281:in `initialize' 
     from /usr/local/rvm/gems/ruby-2.2.1/gems/activerecord-4.2.4/lib/active_record/inheritance.rb:61:in `new' 
     from /usr/local/rvm/gems/ruby-2.2.1/gems/activerecord-4.2.4/lib/active_record/inheritance.rb:61:in `new' 
     from /usr/local/rvm/gems/ruby-2.2.1/gems/activerecord-4.2.4/lib/active_record/persistence.rb:33:in `create' 
     from test.rb:34:in `<main>' 

ActiveRecord的遷移法案模型

def up 
    create_table :bills do |t| 
     t.integer :admin_id 
     t.text :body 
    end 
    add_foreign_key :bills, :admins 
    end 

非常感謝您分享我做錯事情的見解。

+2

錯誤必須執行w ith'Bills'模型中不存在'admin_id',而不是Admin對象中的'admin.id'。檢查你的遷移。 –

+0

而不是立即解決問題,你應該真的重組這個使用belongs_to協會... http://guides.rubyonrails.org/association_basics.html#the-belongs-to-association – photoionized

回答

0

每我的意見,你應該使之成爲一個belongs_to關係這一點,這裏的重構遷移(使用最新的Rails 4語法):

class CreateBills < ActiveRecord::Migration 
    def change 
    create_table :bills do |t| 
     t.references :admin 
     t.text :body 
    end 
    end 
end 

這些關係添加到模型:

class Admin < ActiveRecord::Base 
    has_many :bills 
end 

class Bill < ActiveRecord::Base 
    belongs_to :admin 
end 

以及用於創建與管理員關聯的帳單的代碼:

admin = Admin.find_by(email:email) 
puts "admin id #{admin.id}" # this gets printed with correct value 
bill = admin.bills.create(body: body) 
相關問題