0

私は、ユーザーが 1 つ以上のイベントに参加するアプリケーションを開発しているため、それらのイベント内でユーザーが占める役割に基づいてイベントを「持っている」と言えます。Rolify を使用して、ユーザーとイベントを関連付けています。Rolify は、ユーザーがそのイベント内で果たす役割に基づいて、ユーザーとイベントの間の関連付けを形成します。Rolify は、ユーザーの役割に関するデータを返すことに関心がありますが、ユーザーがその役割を持つイベントについては気にしないため、イベントに関するデータ (ID を除く) は返しません。

したがって、次のようなメソッドを書くことができます。

@user.roles

ユーザーに関連付けられているすべてのロールを取得します。

そのようなロールの 1 つが次のようになります。

 => #<Role id: 1, name: "admin", resource_id: 1, resource_type: "Event", created_at: "2014-12-19 04:00:33", updated_at: "2014-12-19 04:00:33">

言えるようになりたいのは

@user.events(roleName)

roleName に関連付けられたすべてのイベントを取得します。

明らかに、Rolify を介して利用できるものだけを考えると、これを行うことはできません。そのため、ユーザー モデルに役立つメソッドを作成しました。

  def events roleName=nil
    events_list = []

    self.roles.each do |role|
      unless roleName.nil?
        if role.name == roleName && role.resource_type == "Event"
          events_list.push(role.resource_id)
        end
      else
        events_list.push(role.resource_id)
      end
    end
    Event.find(events_list)
  end

私の懸念はそれです

  1. この方法は、何らかの形で単一責任の原則に違反しています。
  2. このメソッドでは、最終的にイベントを取得するために複数のデータベース呼び出しが必要です。1 つはロールに対して、もう 1 つはイベントに対してです。(私はこの種のことに不慣れなので、実際にどれほど悪いかはわかりません。)

Rolify ロールのセットアップを維持しながら、ユーザーのイベントを取得するためのより良い方法はありますか?

4

1 に答える 1