Railsに問題があります。私は実際にそれを解決していますが、私はそこにもっと簡単な方法があると思います。
ユーザー/メンバーシップ/グループモデルとユーザー/招待/イベントモデルを取得しました。メンバーシップはユーザーとグループに参加します。招待状はユーザーとイベントに参加します。
メンバーシップと招待モデルは同じです。グループとイベントには、いくつかの等しいいくつかの異なる列があります。メンバーシップ/招待モデルには両方とも「承認済み」というブール列があります。つまり、グループ/イベントに招待されたユーザーは、メンバー/参加者になる前にこの招待を承認する必要があります。
これで、ユーザーがすべてのグループにサインインすると、イベントの招待状がリストに表示されます。実際、後でシステムに通知を追加したいのですが、イベントはまだ私のものに含まれていません。
私の解決策は、ユーザーに属する通知モデルを追加することです。したがって、すべてのユーザーには多くの通知があります。さらに、このモデルは多形であり、メンバーシップと招待に属します。
#user model
class User < ActiveRecord::Base
has_many :memberships, :dependent => :destroy
has_many :groups, :through => :memberships
has_many :invitations, :dependent => :destroy
has_many :events, :through => invitations
has_many :notifications
#membership model (equal to invitation model)
class Membership < ActiveRecord::Base
belongs_to :user
belongs_to :group
has_one :notifications, :as => :noticeable
#group model (equal to event model but participants for members and invitation for membership)
class Group < ActiveRecord::Base
has_many :memberships
has_many :users, :through => :memberships
has_many :members, :through => :memberships, :source => :user,
:conditions => ['memberships.accepted = ?', true]
#notification model
class Notification < ActiveRecord::Base
belongs_to :user
belongs_to :noticeable, :polymorphic => true
データベースにいくつかのデータを追加し、コンソールでテストしています
myUser = User.find(6) # will be exchanged with current_user in the actual program
私はすべての通知を実行するたびに実行します...しかし、最初に、1つの通知でそれ以降のすべてのアクションをテストします
myNotice = myUser.notifications.first
したがって、myNoticesのnoticeable_typeがメンバーシップであるか招待であるかにかかわらず、この場合はグループ通知またはイベント通知としてレンダリングします。noticeable_type= membership
myGroup = Group.find(Membership.find(myNotice.noticeable_id).group_id)
->グループ「myGroup.name」に参加しますか?はい| いいえ
はいの場合:Membership.find(myNotice.noticeable_id).accepted = true
いいえ:Membership.find(myNotice.noticeable_id).destroy
と:myNotice.destroy
それが私の考えです。これは問題を解決する方法ですか?
すべての通知を通過する「eachdo」はビューファイルにあります。つまり、「Group.find(Membership.find(myNotice.noticeable_id).group_id)」がビューファイルまたは部分的に含まれている必要があります。それは少し醜いではありませんか?
私は多くの「検索」を使用したと思います。これは多くのSQLクエリを意味します。「RubyonRails」(魔法)でそれらを減らす方法はありませんか?
ありがとうございました :)