如何判断 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
我正在使用 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