我已经在这个问题上工作了几天,而我看过的其他 Stack Overflow 帖子要么真的很旧,要么不是我需要的。
问题:
涉及三个模型:
旅行- 代表旅行及其相关信息,注意:不包括任何有关机组人员的信息。
里程碑- 表示在一次旅行中采取的行动(就本问题而言,当船员登船或下船时)。
CrewMember - 代表旅行中的单个机组成员,每个机组成员都有一个登船和下船里程碑,如果他们在同一地点登船或下船,则可以与其他船员共享。CrewMembers 通过他们的 board_milestone_id 和 disembark_milestone_id 链接到里程碑。
现在我正在制作一个表单,用户可以在其中编辑旅行中的所有信息,其中包括旅行中出现的船员、他们的角色以及他们在哪里登船/下船。正在编辑行程,因此整个页面都包含在 form_for 构建器中。
编辑 CrewMembers 的页面部分包含在 fields_for 构建器中。Trips 模型被配置为接受 CrewMember 模型的嵌套属性。船员的数量是可变的,每个人都需要单独编辑他们的信息(所以据我所知,我不能使用 select_tags)。这可以很好地在视图中显示机组成员,但当我实际尝试更新时不起作用,因为 CrewMembers 通过 board_milestone_id 和 disembark_milestone_id 与里程碑相关联,而不仅仅是里程碑_id。
问题:
因此,考虑到所有这些,有没有一种方法可以“教”rails 以从一个行程表中的“里程碑”识别 CrewMembers,无论是登船里程碑 id、下船里程碑 id 还是最好两者兼而有之?
我的印象是,这不是“Rails”做这种事情的方式,但我想在转向更混乱的解决方法之前将这个想法发布到社区。
任何意见是极大的赞赏。感谢您的时间。
要求的型号代码:
class CrewMember < ApplicationRecord
belongs_to :guide
belongs_to :milestone
end
class Trip < ApplicationRecord
belongs_to :launch_slot, required: true
has_many :milestones
has_many :places, through: :milestones
has_many :crew_members, through: :milestones, foreign_key: embark_milestone_id
accepts_nested_attributes_for :milestones
accepts_nested_attributes_for :crew_members
end
class Milestone < ApplicationRecord
belongs_to :trip
belongs_to :place
has_many :crew_members
end