Ruby on rails rails中的属性和构造函数
我是rails新手,甚至不知道这是否是解决我的问题的正确方法 我有一个“俱乐部”ActiveRecords模型,它与“会员”模型有一个“有很多”关联。我希望登录的“俱乐部”只能管理自己的“会员”,因此在“会员”模型的每个操作开始时,我做了类似于以下的操作:Ruby on rails rails中的属性和构造函数,ruby-on-rails,ruby,Ruby On Rails,Ruby,我是rails新手,甚至不知道这是否是解决我的问题的正确方法 我有一个“俱乐部”ActiveRecords模型,它与“会员”模型有一个“有很多”关联。我希望登录的“俱乐部”只能管理自己的“会员”,因此在“会员”模型的每个操作开始时,我做了类似于以下的操作: def index @members = Club.find(session[:club_id]).members 访问正确的成员。然而,这并没有像我在每一个动作中所做的那样变得非常干燥。所以我考虑使用一些与其他语言中的构造函数等价的东西
def index
@members = Club.find(session[:club_id]).members
访问正确的成员。然而,这并没有像我在每一个动作中所做的那样变得非常干燥。所以我考虑使用一些与其他语言中的构造函数等价的东西。我所理解的初始化方法。然而,这不起作用,告诉我为什么,并提出了一个替代方案。后置程序将初始化
def after_initialize
@club = Club.find(session[:club_id])
end
def index
@members = @club.members
....
似乎无论如何都不起作用。有什么原因吗
You have a nil object when you didn't expect it!
The error occurred while evaluating nil.members
让我觉得@club var根本没有设置
另外,这个解决方案真的是好的吗?这使得任何一种能够管理所有俱乐部成员的“超级管理员”都很难实现。你知道我在哪里遗漏了什么吗?你想用a来表示吗
class MembersController < ApplicationController
before_filter :find_club
def index
@members = @club.members
end
private
def find_club
@club = Club.find(session[:club_id])
end
end
类成员控制器
您可以使用before\u过滤器。
在ApplicationController中定义筛选器(以便您可以从任何控制器访问它)
当然,您可以自定义
load\u member
以引发异常,如果@members.empty?
则重定向客户端,或者执行任何您想要的操作。我喜欢一个名为RolereRequest的插件。它允许您创建自定义角色并按控制器应用它们:响应良好。正是我想要的。有一件事我不明白,那就是before_过滤器中的第二个参数。您能澄清“:only=>%w(index)”部分吗?:only选项指定只应为索引操作执行筛选器。
class ApplicationController < ActionController::Base
# ..
protected
def load_members
@members = if session[:club_id]
Club.find(session[:club_id]).members
else
[]
end
end
end
class ClubController < ApplicationController
before_filter :load_members, :only => %w( index )
def index
# here @members is set
end
end
class ClubController < ApplicationController
def index
# do something with members
load_members.each { ... }
end
end