我有一个Post
模型,其中包含read_status
布尔列。我想添加read_at
列,以保存更新read_status
时的时间戳。
如何挂钩事件read_status
已更新?
目前我通过用户点击这些代码更新read_statsu
:
$(function(){
$('.edit_company').submitOnCheck();
});
jQuery.fn.submitOnCheck = function () {
this.find('input[type=submit]').remove();
this.find('input[type=checkbox]').click(function () {
$(this).parent('form').submit();
});
return this;
};
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
也许我最好为阅读状态创建另一个模型?
答案 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
答案 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'属性将使用当前时间进行更新。