我正在使用 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
正确迁移,但是updated_at
当通过 gem 创建或更新记录时不会自动迁移(例如:)@user.invite another_user
。
仅供参考,邀请方法如下:(代码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.all
, Friendship.all
, Amistad::Friendships.all
... 我会得到:
NameError:未初始化的常量友谊
我该如何解决这两个问题。有什么建议么 ?