【问题标题】:how to tell if an association changed in a rails edit form如何判断关联是否在 Rails 编辑表单中更改
【发布时间】:2015-08-05 18:56:06
【问题描述】:

我正在使用simple_form_for 创建/更新两个使用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?

【问题讨论】:

    标签: ruby-on-rails ruby ruby-on-rails-4 activerecord relationship


    【解决方案1】:

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

    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
    

    【讨论】:

    • 不知道我怎么没听懂这个...谢谢!
    猜你喜欢
    • 2010-12-30
    • 2012-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-23
    • 1970-01-01
    • 2013-10-31
    相关资源
    最近更新 更多