Ruby on Rails - 检查对象是否已更改

时间:2017-06-22 00:48:54

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

在我的应用程序中,我有模型Post& ImagePost和& Image具有相同的列: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,以便他们可以在帖子中添加所需的图片。

目前,当用户创建帖子时,该帖子的描述标题&amp; 标记将添加到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查看并更改说明标题&amp; 标签分别为每张图片。

如何查看每张图片的描述标题&amp; 标记已被手动覆盖/更新,或者仍然使用/继承帖子的描述标题&amp;的代码

帖子描述标题&amp; 标签&amp; 图片说明标题&amp; 标记并检查它们是否匹配?如果是这样,怎么能作为一个功能,所以我可以从模型或控制器调用?

2 个答案:

答案 0 :(得分:1)

这只是gabrielhilal's answer的变体:

  

从Post&#39>制作数组是不是一个好主意/做法,描述,   标题&amp;标签&amp;图片,描述,标题&amp;标记并检查它们是否存在   匹配吗?

是的,你可以这样做:

image.rb

def same_as_post?
  summary == post.summary
end

def summary
  [description, title, tags]
end

post.rb

def summary
  [description, title, tags]
end

答案 1 :(得分:1)

如果你想确保手动更新它,我会将这些信息存储在<div id="container"> <div class="cell" style="background-color:pink;"> Lorem ipsum dolor sit amet, consectetur adipiscing elit </div> <div class="cell" style="background-color:lightblue;"> Ut enim ad minim veniam, quis nostrud exercitation ullamco </div> </div>表中(即images布尔字段),然后确保在两者中都正确设置case(回调和更新端点)。

但是,如果您只想知道细节是否相同(用户可能使用与关联帖子相同的数据更新这些字段),您可以向data_from_post模型添加以下内容:

Image