【问题标题】:Ruby on Rails - Check if object has been changedRuby on Rails - 检查对象是否已更改
【发布时间】:2017-11-25 01:58:20
【问题描述】:

在我的应用程序中,我有模型 PostImagePostImage 都有相同的列:descriptiontitletags

这是我的模型中的内容:

class Post < ActiveRecord::Base
  has_many :images, inverse_of: :post
  accepts_nested_attributes_for :images

class Image < ActiveRecord::Base
  belongs_to :post

当用户创建帖子时,我使用nested_forms,以便他们可以在帖子下添加任意数量的图片。

目前,当用户创建帖子时,将添加该帖子的描述标题标签到它的images (这是因为我为用户做的一些事情)来自Post 模型。

我就是这样做的。

class Post < ActiveRecord::Base
after_create :adding_details_to_images

private

  def adding_details_to_images
      self.images.each { |image| image.update_attributes(
          description: self.description,
          title: self.title,
          tags: self.tags
        )
      }
  end 

用户仍然可以转到images#edit 查看并单独更改每张图片的描述标题标签

如何查看每张图片的descriptiontitletags是否已被手动覆盖/更新,或者它们是否仍在使用/继承帖子的描述、标题标签

帖子的描述标题标签&创建一个数组是个好主意/做法吗? 图片的描述标题标签并检查它们是否匹配?如果是这样,如何将其作为一个函数,以便我可以从模型或控制器调用?

【问题讨论】:

    标签: ruby ruby-on-rails-4 inheritance model


    【解决方案1】:

    这只是gabrielhilal's answer的变体:

    从帖子、描述、 标题和标签和图像、描述、标题和标签并检查它们是否 匹配?

    是的,你可以这样做:

    图像.rb

    def same_as_post?
      summary == post.summary
    end
    
    def summary
      [description, title, tags]
    end
    

    post.rb

    def summary
      [description, title, tags]
    end
    

    【讨论】:

    • 谢谢@Gerry。检查updated_at 将不起作用,因为images 有其他列然后descriptiontitletags,如果他们更改了其他列,updated_at 无论如何都会被更改。您认为如果制作一个数组并将它们相互比较不是一个好主意,还是有更好的方法?感谢您的帮助:)
    • @user6589814 然后我会选择 gabrielhilal 的答案,我想这就是你要找的。​​span>
    • 伟大的人 :) 非常感谢,感谢您抽出宝贵的时间 :)
    • @FriendofAfriend 很高兴为您提供帮助!由于此答案是共同努力的结果,因此最好接受一个答案并支持另一个答案。
    • 谢谢@Gerry,我已经做到了。总是为任何花时间提供帮助的人竖起大拇指:)
    【解决方案2】:

    如果您想确保它是否被手动更新,我会将此信息存储在images 表中(即data_from_post 布尔字段),然后确保在两种情况下都正确设置(回调和更新端点)。

    但是,如果您只是想知道详细信息是否相同(用户可能会使用与相关帖子相同的数据更新这些字段),您可以在 Image 模型中添加类似以下内容:

    def same_as_post?
      description == post.description && title == post.title && tags == post.tags
    end
    

    【讨论】:

    • 谢谢@gabrielhilal。将same_as_post? 转到Image 模型或Post。是的,我只是想知道它们是否相同。您认为如果从两个表的详细信息中创建一个数组并将它们相互比较不是一个好主意?感谢您的帮助:)
    • @user6589814 是的,您可以在每个模型中创建一个方法,该方法创建一个包含三列的数组并进行比较。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-10
    • 2015-02-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多