如何保存另一列更新时间?

时间:2015-03-02 02:21:30

标签: ruby-on-rails ruby

我有一个Post模型,其中包含read_status布尔列。我想添加read_at列,以保存更新read_status时的时间戳。

如何挂钩事件read_status已更新?

目前我通过用户点击这些代码更新read_statsu

read_statsu.js

$(function(){
    $('.edit_company').submitOnCheck();
});

posts.js

jQuery.fn.submitOnCheck = function () {
    this.find('input[type=submit]').remove();
    this.find('input[type=checkbox]').click(function () {
    $(this).parent('form').submit();
    });  
    return this;
};

posts_helper.rb

  def read_checkbox(post)
    if user_signed_in?
      form_for(post, remote: true) do |f|
        str = f.check_box :read
        str += f.submit
        str
      end
    end
  end

也许我最好为阅读状态创建另一个模型?

2 个答案:

答案 0 :(得分:3)

我会创建一个Post模型的子模型。让我们称之为PostRecord

因此,您的Post模型与has_many的关系将PostRecord,而PostRecord将属于Post

class Post < ActiveRecord::Base
  has_many :post_records
end

class PostRecord < ActiveRecord::Base
   belongs_to :post
end

您的PostRecord模型将具有:

post_id as type integer 
read_at as type string

Post模型中,您应该定义一个这样的方法:

def updated_read_at
 self.post_record.create post_id: self.id, read_at: Time.now if read_status_changed?
end

More information on the changed? method

答案 1 :(得分:1)

首先,您需要创建迁移,将read_at列添加到posts表中。

rails g migration AddReadAtToPosts read_at: timestamps

然后将以下内容添加到帖子控制器

def show
  @post = Post.find(params[:id])
  @post.update_attribute(:read_at => Time.now)

如果用户点击帖子,那么帖子''read_at'属性将使用当前时间进行更新。