数据库表字段名有:attribute,save,或者 type 等其他保留名(Rails/Ruby 里的方法名),
最简单的ActiveModel.first 就会出错,提示:
ActiveModel.first
ActiveRecord::DangerousAttributeError
现在数据库不能变动,Rails 里该怎么解决?
试试 alias_attribute
alias_attribute
class Person alias_attribute :nickname, :name end
via: https://api.rubyonrails.org/classes/ActiveModel/AttributeMethods/ClassMethods.html
https://github.com/bjones/safe_attributes
可以看下这个 gem,好久没更新,里边的方法大概可以参考
还是会出错,只是给了别名,但是原有 name 还是保留的,所以会出错
activeModel.attributes["first"],不知道行不行
activeModel.attributes["first"]
def new_attr read_attribute(:old_attr) end
换框架。
建一个视图
@palytoxin 肯定是不行的
换框架肯定是行的,比如 Sequel,但还是舍不得 Rails 好用。
我是用 select 解决这个问题,复杂就用视图了。
修改 default_scope + select
我在 rails6 对接第三方数据库也遇到了这个问题,使用 select as 依然会报错。因为不关心冲突字段的值,所以最终用了个折衷方案,忽略冲突的字段 self.ignored_columns = [:conflict_columns]
self.ignored_columns = [:conflict_columns]