微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

mysql – 如何在没有ActiveRecord动态生成属性的情况下创建由数据库表支持的Rails 3模型?

我正在尝试为第三方服务创建API,并且我已经获得了访问具有我需要的所有数据的复制数据库.不幸的是,在MySQL中使用哪些特权以便不暴露专有数据库设计存在限制.

数据库设置为将某些数据库表公开为视图,并在这些视图上授予SELECT权限.

我有一些模型支持的模型不符合典型的Rails表命名约定,定义如下:

class MyAPIModule::City < ActiveRecord::Base
    set_table_name "VIEW_CITY"
end

ActiveModel尝试动态构建模型属性的任何查询都会失败,例如:

MyAPIModule::City.find(1)

失败:

MysqL2::Error: SHOW VIEW command denied to user 'theuser'@'thehost' for table 'VIEW_CITY': SHOW CREATE TABLE `VIEW_CITY`
ActiveRecord::StatementInvalid: MysqL2::Error: SHOW VIEW command denied to user 'theuser'@'thehost' for table 'VIEW_CITY': SHOW CREATE TABLE `VIEW_CITY`

问题是,priveleges不允许ActiveRecord运行“SHOW CREATE TABLE”查询来收集列信息并构建模型属性.

有没有办法对表模式进行硬编码,以防止ActiveRecord需要使用“SHOW CREATE TABLE”查询数据库中的表构造?

编辑:

结合我对sameera207的回复

class MyAPIModule::City
    include ActiveModel::Validations
    include ActiveModel::Conversion
    include ActiveModel::SerializerSupport
    extend  ActiveModel::Naming

    ...
end

解决方法:

我不确定有没有办法从数据库中跳过列限制,但是一个解决方法是直接执行你的sql命令.

它需要手动编码,

class MyAPIModule::City < ActiveRecord::Base
    set_table_name "VIEW_CITY"

    def find(id)
       obj = ActiveRecord::Base.connection().execute("select * from your table")
       #above will return an array, so you will have to create your object
       obj
    end 

end

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐