如何判断 rails 编辑表单中的关联是否已更改

how to tell if an association changed in a rails edit form

我正在使用 simple_form_for 到 create/update 两个通过使用 f.association 相关的模型。但是每当我更新它时,我都需要以某种方式获取关联中更改的内容的集合。它是名为 ProjectLevels 的模型和名为 PackageContents 的模型之间的 has_and_belongs_to_many 关系。所以在 project_levels_controller 的强参数中我有 package_content_ids: []。但是如果我尝试使用 @project_level.package_content_ids_changed? 它会给出一个未定义的方法错误,即使 @project_level.name_changed? 会起作用。我也试过 @project_level.package_contents.changed? 它也给出了一个无方法错误。那么如何在编辑表单中查看 project_level 添加或删除了哪些 package_contents?

您可以在控制器中比较来自参数的数组:

new_ids = params[:package_content_ids]

使用当前模型的 ID( 之前,您将参数分配给它):

old_ids = @project_level.package_contents_ids

您可以只使用标准 Ruby 数组方法来获取您需要的信息:

old_ids - new_ids # what was deleted
new_ids - old_ids # what was added
new_ids & old_ids # what was not changed
new_ids.sort == old_ids.sort # if something was changed