【发布时间】:2017-06-13 21:20:05
【问题描述】:
我已经在这个问题上工作了几天,而我看过的其他 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、disembark_milestone_id 或最好两者兼而有之?
我的印象是,这不是 'Rails' 做这种事情的方式,但我想在转向更混乱的解决方法之前将这个想法发布到社区。p>
非常感谢任何建议。感谢您的宝贵时间。
要求的型号代码:
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
【问题讨论】:
-
你能给我们看看模型代码吗?
-
'在视图中显示机组成员时效果很好,但在我实际尝试更新时不起作用' - 可以向我们展示您的视图以及您目前的更新方式吗?
标签: ruby-on-rails-5 many-to-one fields-for accepts-nested-attributes