mysql - Rails 中列名称的别名属性

标签 mysql ruby-on-rails ruby alias

所以,我有一个数据库,它是为一个旧的 php 应用程序设置的,我无法触及数据库的完成方式。

但是,我在数据库中有一些列名称使用了 Ruby 中的一些限制词,例如“class”

为了让它发挥作用,我使用了 alias_attribute

但它不起作用。这是代码:

class Contractor < ActiveRecord::Base
  set_table_name "contractors"
  alias_attribute :class_type, :class
  attr_accessible :about, :alias, :business_entity, :business_logo, :business_name, :city, :class, :county, :created, :email, :founded, :metroarea, :nid, :phone, :state, :status, :street_address, :uid, :zipcode
end

这里是错误:

1.9.3-p125 :001 > Contractor.last
SyntaxError: /Users/snoopy/.rvm/gems/ruby-1.9.3-p125/gems/activemodel-3.2.13/lib/active_model/attribute_methods.rb:345: syntax error, unexpected ')', expecting '='
    from /Users/snoopy/.rvm/gems/ruby-1.9.3-p125/gems/activemodel-3.2.13/lib/active_model/attribute_methods.rb:343:in `module_eval'
    from /Users/snoopy/.rvm/gems/ruby-1.9.3-p125/gems/activemodel-3.2.13/lib/active_model/attribute_methods.rb:343:in `define_optimized_call'
    from /Users/snoopy/.rvm/gems/ruby-1.9.3-p125/gems/activemodel-3.2.13/lib/active_model/attribute_methods.rb:227:in `block in alias_attribute'
    from /Users/snoopy/.rvm/gems/ruby-1.9.3-p125/gems/activemodel-3.2.13/lib/active_model/attribute_methods.rb:224:in `each'
    from /Users/snoopy/.rvm/gems/ruby-1.9.3-p125/gems/activemodel-3.2.13/lib/active_model/attribute_methods.rb:224:in `alias_attribute'
    from /Users/snoopy/Projects/buildzoom/ruby/service_request/app/models/contractor.rb:3:in `<class:Contractor>'
    from /Users/snoopy/Projects/buildzoom/ruby/service_request/app/models/contractor.rb:1:in `<top (required)>'
    from /Users/snoopy/.rvm/gems/ruby-1.9.3-p125/gems/activesupport-3.2.13/lib/active_support/dependencies.rb:469:in `load'
    from /Users/snoopy/.rvm/gems/ruby-1.9.3-p125/gems/activesupport-3.2.13/lib/active_support/dependencies.rb:469:in `block in load_file'
    from /Users/snoopy/.rvm/gems/ruby-1.9.3-p125/gems/activesupport-3.2.13/lib/active_support/dependencies.rb:639:in `new_constants_in'
    from /Users/snoopy/.rvm/gems/ruby-1.9.3-p125/gems/activesupport-3.2.13/lib/active_support/dependencies.rb:468:in `load_file'
    from /Users/snoopy/.rvm/gems/ruby-1.9.3-p125/gems/activesupport-3.2.13/lib/active_support/dependencies.rb:353:in `require_or_load'
    from /Users/snoopy/.rvm/gems/ruby-1.9.3-p125/gems/activesupport-3.2.13/lib/active_support/dependencies.rb:502:in `load_missing_constant'
    from /Users/snoopy/.rvm/gems/ruby-1.9.3-p125/gems/activesupport-3.2.13/lib/active_support/dependencies.rb:192:in `block in const_missing'
    from /Users/snoopy/.rvm/gems/ruby-1.9.3-p125/gems/activesupport-3.2.13/lib/active_support/dependencies.rb:190:in `each'
    from /Users/snoopy/.rvm/gems/ruby-1.9.3-p125/gems/activesupport-3.2.13/lib/active_support/dependencies.rb:190:in `const_missing'
    from (irb):1
    from /Users/snoopy/.rvm/gems/ruby-1.9.3-p125/gems/railties-3.2.13/lib/rails/commands/console.rb:47:in `start'
    from /Users/snoopy/.rvm/gems/ruby-1.9.3-p125/gems/railties-3.2.13/lib/rails/commands/console.rb:8:in `start'
    from /Users/snoopy/.rvm/gems/ruby-1.9.3-p125/gems/railties-3.2.13/lib/rails/commands.rb:41:in `<top (required)>'
    from script/rails:6:in `require'
    from script/rails:6:in `<main>'

1.9.3-p125 :003 > Contractor.where(:zipcode => "94111")
  Contractor Load (648.6ms)  SELECT `contractors`.* FROM `contractors` WHERE `contractors`.`zipcode` = '94111'
(Object doesn't support #inspect)
 =>

最后一个仅在我删除 alias_attribute 时出现,否则与第一个错误相同

最佳答案

我认为你的问题是你给“:class”的别名 类是 ActiveRecord 方法之一 你可以通过运行这个命令来查看它

Contractor.first.methods

定义这个别名只是以某种方式“覆盖”它并中断 rails 操作

关于mysql - Rails 中列名称的别名属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17474653/

相关文章:

mysql - 为什么 GROUP_BY 不返回所需的记录?

ruby-on-rails - 如何查看 capybara 在失败的 cucumber 步骤中发现了什么?

ruby - 在 Ruby 中,binging.pry 被跳过

ruby-on-rails - Rails 在 before_action 中渲染和返回,DoubleRenderError

ruby - Ruby 是否有正式的规范(如 Java 语言规范 (JLS))?

ruby-on-rails - WebMock stub_request 不工作

Mysql,在触发器中插入不应该插入NULL值

mysql - 在 mysql 命令中查找重复行

php - 将json数据更新到db中

javascript - 创建关闭事件以从自定义叠加层发出