アプリケーションでフレンドシップを管理するために 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
)。
参考までに、招待方法は次のとおりです: (コードはこちら)
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: 初期化されていない定数 Friendship
この 2 つの問題を解決するにはどうすればよいでしょうか。助言がありますか ?