我是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