1

我正在为俱乐部做这个软件,人们可以在其中登录并添加分数、球员、球队等。现在我当然有很多俱乐部,每个模型都有一个 club_id 列来识别那个俱乐部。有没有比写这样的东西更容易检查当前俱乐部的方法:

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

我发现将这个问题抽象得太难以至于我找不到任何答案。

4

3 回答 3

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

好吧,您可以在控制器中编写一些前置过滤器。使用您的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 回答
0

当 RoR 中的每个模型都有默认的 id 属性时,为什么要创建一个额外的 id(club_id)?您可以使用此代码

新闻.find(id)。

如果您仍然坚持,那么替代代码是:

News.find_by_club_id(@club_id)

于 2012-10-14T10:46:08.430 回答