使用大写用于列名称的旧表。重命名列不是一种选择。
我正在尝试使用表格/模型的COLUMN_NAME
属性找到记录。
这些陈述:
c = MetaColumn.find_by_COLUMN_NAME('PATIENT_ID')
c = MetaColumn.find_by_column_name('PATIENT_ID')
生成错误:
formal argument cannot be a constant
def self.find_by_name(COLUMN_NAME, options = {})
这些陈述按预期工作:
> c = MetaColumn.find_by column_name: 'PATIENT_ID'
> c = MetaColumn.find_by COLUMN_NAME: 'PATIENT_ID'
有没有办法表明COLUMN_NAME
是一个字段,而不是常量?
答案 0 :(得分:0)
您可以为列名称添加别名:
alias_attribute :new_column_name, :real_column_name
当然,如果没有其他任何内容触及该数据库,您可以考虑重命名列名:
class ChangeOldColumnToNewColumn < ActiveRecord::Migration
def change
rename_column :tableName, :oldColumn, :newColumn
end
end
答案 1 :(得分:0)
您应该尝试修改您丢失的方法以提升您的搜索查询以反映数据库,以便您的方法看起来像#rails;类似&#34;对于任何追随你的人尝试以下操作,这应该允许您仍然使用find_by_column
等方法,并在幕后将其翻译为大写。
def method_missing(m, *args, &blk)
m = m.to_s.upcase if @attributes.include? m.to_s.upcase.gsub(/=/, '')
super(m, *args, &blk)
end