Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails rails中的属性和构造函数_Ruby On Rails_Ruby - Fatal编程技术网

Ruby on rails rails中的属性和构造函数

Ruby on rails rails中的属性和构造函数,ruby-on-rails,ruby,Ruby On Rails,Ruby,我是rails新手,甚至不知道这是否是解决我的问题的正确方法 我有一个“俱乐部”ActiveRecords模型,它与“会员”模型有一个“有很多”关联。我希望登录的“俱乐部”只能管理自己的“会员”,因此在“会员”模型的每个操作开始时,我做了类似于以下的操作: def index @members = Club.find(session[:club_id]).members 访问正确的成员。然而,这并没有像我在每一个动作中所做的那样变得非常干燥。所以我考虑使用一些与其他语言中的构造函数等价的东西

我是rails新手,甚至不知道这是否是解决我的问题的正确方法

我有一个“俱乐部”ActiveRecords模型,它与“会员”模型有一个“有很多”关联。我希望登录的“俱乐部”只能管理自己的“会员”,因此在“会员”模型的每个操作开始时,我做了类似于以下的操作:

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