ruby-on-rails - Rails 控制台为包含值的列返回 nil

标签 ruby-on-rails ruby ruby-on-rails-4 rails-activerecord

我正在开发一个使用 CanCanCan gem 的应用程序,它是 Ryan Bates 的 CanCan 的更新,用于授权。 CanCan 使用 :role 属性来分配能力。我的用户模型也使用 STI,包含管理员和另一个称为“代理”的角色。为了避免冗余并保持干燥,我还使用 :role 属性作为 inheritance_column

class User < ActiveRecord::Base

    has_secure_password

    attr_reader :role

  scope :profile, -> { includes(:address, :city, :state, :zip, :phone, :email)}
  scope :office_use, -> { includes(:username, :role, :type, :last_name, :first_name,     :password_digest)}

  self.inheritance_column = :role  


  def self.roles
     %w[Admin Agent]
  end 

在 Rails 控制台中,我创建了一个新用户。我从输入表单中删除了分配角色的选项,我想我会手动创建管理员,因为不会有很多,所以它输入默认值,“代理”:

   (63.4ms)  COMMIT
 => #<User id: 2, username: "ff001", role: "Agent", password_digest:     "$2a$10$osm9oEB51GKilUkX64sV7eMlt6pEfuzEfKIf3gRo/az...", last_name: "Flintstone", first_name: "Fred", address: nil, city: nil, state: nil, zip: nil, phone: nil, email: nil, created_at: "2015-01-01 19:01:11", updated_at: "2015-01-01 19:01:11"> 2.1.4 :019 > 

检索行:

> User.last
  User Load (0.6ms)  SELECT  `users`.* FROM `users`   ORDER BY `users`.`id` DESC LIMIT 1
=> #<Agent id: 2, username: "ff001", role: "Agent", password_digest: "$2a$10$osm9oEB51GKilUkX64sV7eMlt6pEfuzEfKIf3gRo/az...", last_name: "Flintstone", first_name: "Fred", address: nil, city: nil, state: nil, zip: nil, phone: nil, email: nil, created_at: "2015-01-01 19:01:11", updated_at: "2015-01-01 19:01:11"> 2.1.4 :020 > 

现在查询 :role 属性:

 > User.last.role
  User Load (0.4ms)  SELECT  `users`.* FROM `users`   ORDER BY `users`.`id` DESC LIMIT 1
 => nil 

这只发生在角色属性的情况下——所有其他列在查询时返回它们的正确值。该角色不仅用于应用程序中的授权,还用于为管理员路由到不同的资源。由于 ActiveRecord 在 Controller 中返回 nil,因此我的路由也无法正常工作。我什至还没有达到授权发挥作用的地步。在路由正常工作之前,授权还没有实际意义。

为什么会这样? :role 属性是唯一以这种方式表现的属性。

最佳答案

删除 attr_reader :role - 这应该已经在您的模式中进行了概述。然后在您的控制台中执行 User.last.role,您将取回您分配的内容。

关于ruby-on-rails - Rails 控制台为包含值的列返回 nil,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27733799/

相关文章:

ruby - 在ruby-on-rails中,如何将类似 '\X93'的字符串格式转换成原来的样子?

ruby-on-rails - PostgreSQL 合并列并转换为具有本地时区的时间戳

search - 将表数据归档到 Rails 中的另一个表中

ruby-on-rails - 基于 has_many 范围计数的 Rails 事件记录范围

mysql - Rails 事件记录查询获取最常见的对象

javascript - 取消订阅 Pusher channel

java - Rails 将 Rails 应用程序上传到 Passenger 服务器

ruby-on-rails - 如何从 OS X 中删除 Ruby

ruby-on-rails - 在Rails开发环境中如何获取Hoptoad或Airbrake错误通知

ruby-on-rails - 如何按散列值在 JSON 散列数组中进行搜索?