我是Ruby on Rails的全新人物,我正在理解我的關聯。Ruby on Rails協會沒有生效
在我的公司,我們租用包含掃描儀和服務器的掃描儀包。
當我們收到一個掃描程序包的請求時,理想情況下,我會創建一個新的掃描程序包,附帶客戶信息並附加,但需要許多掃描儀和服務器。
這裏是我有我的三個型號,scanner_pack,服務器和掃描儀:
scanner_pack.rb:
class ScannerPack < ActiveRecord::Base
attr_accessible :producer, :reserved_from, :reserved_to, :scanner_id, :server_id, :scanner_pack_id
has_many :scanners, :foreign_key => "scanner_id"
has_many :servers, :foreign_key => "server_id"
end
server.rb:
class Server < ActiveRecord::Base
attr_accessible :cat5, :power_cable, :router, :name, :status, :location, :id, :notes, :reserved_from, :reserved_to, :scanner_pack_id
belongs_to :scanner_pack, :class_name => "Server", :foreign_key => "server_id"
end
scanner.rb:
class Scanner < ActiveRecord::Base
attr_accessible :id, :location, :name, :notes, :serial, :status
belongs_to :scanner_pack, :class_name => "Scanner", :foreign_key => "scanner_id"
end
我GOOGLE了,現在搜索相當一段時間,我發現有時人們說以刪除scanner_id和SERVER_ID的attr_accessible在scanner_pack模型,因爲它會覆蓋的關聯。當我這樣做,我得到的錯誤:
ActiveModel::MassAssignmentSecurity::Error: Can't mass-assign protected attributes:
在軌控制檯,當我試圖創建一個新的ScannerPack我做這樣的事情:
scanner = Scanner.find(1)
ScannerPack.create(:producer => 12345, :scanner_id => scanner.id)
然後,如果我嘗試像:
scannerpack = ScannerPack.find(1)
scannerpack.scanner_id
它,當我試圖返回scanner_id
正確的值:scannerpack.scanner.id
它給了我一個未定義的方法錯誤(我也試過scannerpack.scanners.id
)。在我看來,它應該返回從掃描儀對象的掃描器的ID
我在想我要麼失去了一些非常簡單的東西,或者我完全誤解了如何做到這一點。也許我應該使用一個has_and_belongs_to_many
關聯?我會很感激任何人都可以給予的幫助!
謝謝!
編輯:這是關於github的整個項目。
由於馬立克,我留在昨晚代碼配合後嘗試一切我遇到的小事,我已經刪除它,它仍然不工作,我也更新了原來的問題如果這有助於整個項目。 – chantron
你得到了什麼錯誤? –
我可以將掃描程序的ID分配給掃描程序包中的scanner_id,但似乎它只是分配整數並且沒有與實際的掃描程序對象建立關聯。 – chantron