Ruby - 如何更好地干这个方法?

时间:2015-09-18 13:30:22

标签: ruby-on-rails-4 dry

是否有任何DRYer方法来编写此方法?或者更好地保持这种方式以便更好地理解读者...

每个角色都有一个特定资源的授权活动列表(在本例中为Sheet),用户可能有多个角色(取决于他的公司,他在公司的工作组,他在工作组中的职能)。此方法是sheet_policy,如果在所有角色中,当前用户可以“索引”工作表,则该方法返回true,否则返回false

   def index?
    # check if sheet#index is listed in current_user roles activities
    sheet_activities = []
    user.roles.each {|role| sheet_activities << role.activities["sheet"]}
    return false if sheet_activities.first.nil? # no authorized activities on Sheet
    sheet_activities.flatten.uniq!.include?("index")
  end

活动是Sheet记录的JSONB属性...

create_table :roles do |t|
  t.string      :company, null: false, default: Settings.company.default.name
  t.string      :group
  t.string      :function
  t.jsonb       :activities, null: false, default: '{}'      
  t.timestamps  null: false

播种示例:

   @role_accounting_employee = Role.create( group: "accounting", function: "employee")  # default company : "internal"
   @role_accounting_employee.activities.deep_merge!({sheet: %w(show index) })

0 个答案:

没有答案