1

私は、人々がサインインしてスコア、プレーヤー、チームなどを追加できるクラブ向けにこのソフトウェアを使用しています。もちろん、今では多くのクラブがあり、すべてのモデルにそのクラブを識別するclub_id列があります。次のようなものを書くよりも、現在のクラブをチェックする簡単な方法はありますか?

News.where("club_id = ?", @club_id)

この問題を抽象化するのは難しすぎて、答えを見つけることができませんでした。

4

3 に答える 3

1

1つの方法は、モデルの基本的なクラスを作成することです。

class ClubStuff < ActiveRecord::Base
  self.abstract_class = true # <--- don't forget
  default_scope { where(club_id: Thread.current[:club_id]) }
end

そしてそれからあなたのモデルを作ります:

class News < ClubStuff

それで:

# in ApplicationController
before_filter { Thread.current[:club_id] = params[:club_id] }

私はあなたがその考えを理解したことを望みます。

于 2012-10-14T11:02:36.280 に答える
0

RoRのすべてのモデルにデフォルトのid属性があるのに、なぜ追加のID(club_id)を作成するのですか?このコードを使用できます

News.find(id)。

それでも主張する場合は、代替コードは次のとおりです。

News.find_by_club_id(@club_id)

于 2012-10-14T10:46:08.430 に答える
0

コントローラーのフィルターの前にいくつか書くことができます。あなたのTeam例を使用して:

class TeamController < AC
  before_filter :get_club, :only => [ :index ]    # you can limit the filter to methods

  def index
    # because of the before filter you can access club here
    @teams = @club.teams
  end

  # ...

  private
  def get_club
    @club = Club.find(params[:club_id])
  end
end

この動作は、モジュールに移動することもできます。フィルタの詳細については、こちらをご覧ください。

于 2012-10-14T10:58:28.700 に答える