我是 Ruby on Rails 的新手,我很高兴能理解我的关联。
在我的公司,我们出租包含扫描仪和服务器的扫描仪包。
当我们收到扫描仪包的请求时,理想情况下,我会使用客户信息创建一个新的扫描仪包,并附加所需的许多扫描仪和服务器。
这是我的三个模型,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
服务器.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
扫描仪.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
我已经用谷歌搜索了很长一段时间,我注意到有时人们说要删除scanner_pack模型中scanner_id和server_id的attr_accessible,因为它会覆盖关联。当我这样做时,我得到了错误:
ActiveModel::MassAssignmentSecurity::Error: Can't mass-assign protected attributes:
在 Rails 控制台中,当我尝试创建新的 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上的整个项目。