ruby-on-rails - 如何在具有名为 'attribute' 的列的数据库上使用 ActiveRecord ? (危险属性错误)

标签 ruby-on-rails ruby ruby-on-rails-3 activerecord

我正在访问一个无法更改的数据库,并且它定义了一个名为 attribute 的列。每当我尝试访问属性时,我都会收到此异常:

属性?由 ActiveRecord(ActiveRecord::DangerousAttributeError) 定义

我的代码:

class User < ActiveRecord::Base
      def self.authenticate(username,password)
        where(:username => username, :value => password).first
      end
end

我在 ruby​​ on Rails 邮件列表上找到了一个解决问题的计划,但对我不起作用

  class << self
    def instance_method_already_implemented?(method_name)
      return true if method_name == 'attribute'
      super
    end
  end

我不确定这是否重要,但以下是我的环境的详细信息:

  • ruby 1.9.2p0(2010-08-18 修订版) 29036) [x86_64-darwin10.4.0]
  • rails
  • 3.0.1 activerecord (3.0.1) activeresource (3.0.1)

更新(已解决):

A计划:

select("username, value").where(:username => username, :value => password).first

最佳答案

ActiveRecord 查询支​​持 :select 参数,该参数允许您定义想要以字符串形式返回的字段。

通常人们使用类似的东西:

:select => 'field1, field2'

如果您知道数据库服务器的原始查询语言,则可以在选择字符串中使用它。使用 SQL 选择字段时的选项之一是使用 as 修饰符:

select field1 as the_first_field, field2 as the_second_field

数据库将使用新字段名称而不是旧字段名称返回字段。如果您的数据库支持,那么这是一种管理遗留字段的简单方法,这些字段的命名方式与 Rails 冲突。

请参阅《Ruby on Rails 指南》中“Five ActiveRecord Tips”和“Selecting Specific Fields”中的“学习喜爱 ActiveRecord 的 :select 参数”。

以下是我的一个 Rails 应用程序中使用 rails 控制台 访问 Postgres 数据库的示例:

ruby-1.9.2-p180 :007 > dn = DomainName.first
 => #<DomainName id: 1, domain_name: "ip72-208-155-230.ph.ph.cox.net", created_at: "2010-04-20 05:53:22", updated_at: "2010-04-20 05:53:22"> 
ruby-1.9.2-p180 :008 > dn = DomainName.first(:select => 'id, domain_name as dn')
 => #<DomainName id: 1> 
ruby-1.9.2-p180 :009 > dn['id']
 => 1 
ruby-1.9.2-p180 :010 > dn['dn']
 => "ip72-208-155-230.ph.ph.cox.net"

关于ruby-on-rails - 如何在具有名为 'attribute' 的列的数据库上使用 ActiveRecord ? (危险属性错误),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5428987/

相关文章:

ruby-on-rails - Rails3的start_form_tag等效于什么?

css - 如何使用 PDFKit 在 Rails 中捕获想要的 html div

ruby - 如何在 Mac OS X 上手动构建通用 ruby​​? rvm 怎么样?

ruby - AzureRM 应用程序网关 Rest API

ruby-on-rails - Gemfile 中的 "~> 4.0.1"、 "4.0.1"和无版本说明符有什么区别?

ruby-on-rails-3 - 在设备的 :authenticate_user? 之后添加过滤器

ruby-on-rails - Ruby on Rails - 检查提交的表单数据是否与数据库数据匹配

ruby-on-rails - Rails 追加数据库

ruby-on-rails - 有没有办法在没有 mod_rewrite 的情况下使用 Ruby on Rails 将 www.foo.com/* 重定向到 foo.com/*

ruby-on-rails - Assets 预编译错误:未初始化的常量 Mongo::Logging