我正在为俱乐部做这个软件,人们可以登录并添加分数,球员,球队等。现在我当然有很多俱乐部,每个模特都有club_id专栏来识别那个俱乐部。是否有一些更简单的方法来检查当前的俱乐部而不是写这样的东西:
News.where("club_id = ?", @club_id)
我发现很难抽象出这个问题,以至于我找不到任何答案。
答案 0 :(得分: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] }
我希望你明白了。
答案 1 :(得分:0)
为什么在RoR的每个模型中都有默认的id属性时创建一个额外的id(club_id)?您可以使用此代码
News.find(ID)。
如果你仍然坚持,那么替代代码是:
News.find_by_club_id(@club_id)
答案 2 :(得分: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
此行为也可以移动到模块中。有关过滤器的详情,请参阅here。