我正在使用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.all
,Friendship.all
,Amistad::Friendships.all
...我得到:
NameError:未初始化的常量友谊
我如何解决这两个问题。有什么建议吗?
答案 0 :(得分:0)
要访问友谊模型,请使用:Amistad::Friendships::UserFriendship.all
迁移很好。没有别的办法可以让字段自动更新。
不要忘记重新启动服务器,以便Active Record获取迁移的更改!