我为rails应用程序中的许多资源创建了脚手架,这些脚本构成了系统的内容。
我现在需要做的是构建一个表单,让新用户从脚手架中选择元素,然后保存。实际上,它是其他资源的配置。
例如,
我有四种模式:
class House < ActiveRecord::Base
has_many :windows
has_many :doors
end
class Window < ActiveRecord::Base
belongs_to :house
has_many :locks
end
class Door < ActiveRecord::Base
belongs_to :house
has_many :locks
end
class Lock < ActiveRecord::Base
belongs_to :window
belongs_to :door
end
管理员已将所有可用的Windows,门和锁上传到系统中 我需要建造一个有这些选择的新房子。
我希望有一种简单的方法可以做到这一点,但遗憾的是我无法想到一种干净的方式。
答案 0 :(得分:1)
你的意思是你只想把一个'房子'保存在某些组合或窗户,门和通过它们锁定的地方吗?
如果这是正确的,并且如果一个房子可以有多个窗口和可以在许多房屋中放置一个窗口,则应考虑将数据模型从has_many
更改为{{1关系。
这样,您可以创建多个房屋,每个房屋:1)具有窗户的组合,2)具有门的组合,以及3)具有锁的组合。
如果您担心如何创建实际表单,请查看has_and_belongs_to_many
。
https://github.com/ryanb/nested_form
http://blog.madebydna.com/all/code/2010/10/07/dynamic-nested-froms-with-the-nested-form-gem.html
答案 1 :(得分:0)
您发现这种困难的原因是因为您的关系不太正确。 以房间为例。 您正在使用房间作为查找权吗? 因此,您需要一个外部参照表作为房屋和房间之间的多对多连接。 您可以将其称为house_room。然后,您可以为房间中每个房间和房屋之间的房间创建新的house_room记录。 您的交叉参考表在房间的情况下,需要有房屋和房间表的外键。 然后你可以在house_room中添加任意数量的窗口,但这又需要一个可以有很多锁的room_window外部参照表。
实际上我认为你会发现锁对你有用的多态关系。您不需要外部参照表。锁的多态关系允许您将锁链接到不同的模型。
不要试图使用has_and_belongs_to
使用has_many和has_many:通过关系。
您将找到有助于构建表单的fields_for和accepts_nested_attributes组合,以及用于为添加的每个新外部参照记录选择窗口,锁定等等的视图助手选择功能。
这应该给你足够的思考,并希望指出你正确的方向,至少开始思考你需要了解更多的东西。