自定义amistad:添加时间戳

时间:2013-05-23 15:24:37

标签: ruby-on-rails-3 rubygems amistad

我正在使用gem amistad来管理我的应用程序中的友谊。

我想跟踪何时发生关系以显示某些通知。

首先,我想在关系模型中添加时间戳,以便能够执行以下查询:retrieve all Friendships where receiving user is current user, and where updated_at is greater than the last time the current_user checked his notifications。通过计算这些结果我可以说:3个传入的联系请求并显示它们。

所以我进行了迁移:

class AddUpdatedAtToFriendship < ActiveRecord::Migration
  def change
    change_table :friendships do |t|
      t.timestamps
    end
  end
end

rake db:migrate正确迁移,但是当通过gem创建或更新记录时,updated_at不会自动迁移(例如:@user.invite another_user)。

仅供参考,邀请方法如下:(code here

def invite(user)
      return false if user == self || find_any_friendship_with(user)
      Amistad.friendship_class.new{ |f| f.friendable = self ; f.friend = user }.save
end

我不明白为什么活动记录自动时间戳在这种情况下不起作用。

注意:如果我在控制台中手动创建友谊,则会设置时间戳:

$> rails c
test = Amistad::Friendships::UserFriendship.new
test.friend_id = 1
test.friendable_id = 2
test.save
test.updated_at
=> Thu, 23 May 2013 17:59:17 CEST +02:00

即使我在控制台中这样做,也设置了时间戳:所以它必须是一个上下文问题......

$> rails c
test2 = Amistad.friendship_class.new{ |f| f.friendable = User.find_by_id(5) ; f.friend = User.find_by_id(6) }.save
test2.updated_at
=> Thu, 23 May 2013 18:02:05 CEST +02:00

但是,当我在应用程序中调用@user.invite another_user时,它不会更新时间戳......


其次,在rails控制台中,如果我输入Friendships.allFriendship.allAmistad::Friendships.all ...我得到:

  

NameError:未初始化的常量友谊


我如何解决这两个问题。有什么建议吗?

1 个答案:

答案 0 :(得分:0)

要访问友谊模型,请使用:Amistad::Friendships::UserFriendship.all

迁移很好。没有别的办法可以让字段自动更新。

不要忘记重新启动服务器,以便Active Record获取迁移的更改!