【问题标题】:Methods calling in RubyRuby 中调用的方法
【发布时间】:2013-05-27 07:32:24
【问题描述】:

我在CanCan gem 中找到了此代码用于rails:

def initialize(user)
    can do |action, subject_class, subject|
      user.permissions.find_all_by_action(aliases_for_action(action)).any? do |permission|
        permission.subject_class == subject_class.to_s &&
          (subject.nil? || permission.subject_id.nil? || permission.subject_id == subject.id)
      end
    end
  end

我知道方法可以被多次调用,但是参数是怎么传的呢? actionsubject_classsubject 变量在哪里启动?

【问题讨论】:

  • can 方法产生这些参数 - 读取块。
  • 谢谢,弗雷德里克。这就是我需要的。

标签: ruby-on-rails ruby scope


【解决方案1】:

从cancan wiki中给出的示例中,有以下模型:

class User < ActiveRecord::Base
  has_many :permissions
end

class Permissions < ActiveRecord::Base
  belongs_to :user
end

actionsubject_classsubject_idpermissions 表和permission 模型上的数据库中的列,ActiveRecord 为模型对象自动生成方法。比如

@permission = Permission.new
@permission.action = :new
@permission.subject_class = :ApplicationController
@permission.save

这会将这些数据保存在权限表中

进一步,

  • action = 索引、编辑、删除等具体操作。
  • subject_class = 是控制器的名称,如 ApplicationController
  • subject_id = 可选

【讨论】:

  • 这个我明白。让我混淆有问题的代码。 Can - 启动当前会话权限的方法。行。但是这段代码如何工作?它运行方法可以多次吗?参数在哪里传递?其实我认为这是我不完全理解 ruby​​ 语法的问题
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-03-28
  • 2013-07-01
  • 2015-10-06
  • 1970-01-01
  • 1970-01-01
  • 2016-10-29
相关资源
最近更新 更多