【问题标题】:Store data retrieved as result of find_by_sql method in ruby on rails在 ruby​​ on rails 中存储作为 find_by_sql 方法的结果检索到的数据
【发布时间】:2015-07-16 20:02:09
【问题描述】:

我是 ruby​​ on rails 的新手。我正在尝试从我的数据库中检索数据并在我的 rails 应用程序中进行操作。我在我的班级 Activity 中尝试使用 find_by_sql 时被卡住了

我有一个结构为

的费率表
id | Instrument Name | Category | Time_of_usage | Rates
1  | Instrument1     | Internal | Regular       | 25
2  | Instrument2     | Internal | Weekends      | 15  

这是我想要实现的示例代码

sql2='SELECT Rates FROM New_billcodes_mock WHERE Category_name=?, Instrument_name=? and Time_zone_name=?'
result2=  find_by_sql[sql2,'Internal','Instrument1',time_zone_name]
database_billrate_value_normal=result2['Rates']

并使用 database_billrate_value_normal 变量进行我的操作。

如果我错了,请指导我正确的路径。

【问题讨论】:

    标签: ruby-on-rails ruby rails-activerecord find-by-sql


    【解决方案1】:

    我不清楚带有费率表的模型是 Activity 还是 NewBillcodeMock 或 Rate。

    如果是Rate,你应该可以这样做:

    database_billrate_value_normal = 
        Rate.where("category_name=? AND 
                    instrument_name=? AND 
                    time_zone_name=?",
                    params[:category_name],
                    params[:instrument_name],
                    params[:time_zone_name]).pluck[:rates]
    

    ...假设您有一个带有所需属性值的哈希 params,这些是实际的属性名称。

    这将返回一个汇率数组,然后您可以根据需要直接在 Ruby 中进行操作。

    【讨论】:

    • 表的名称是New_billcodes_mock,我要检索的属性值是Rates。如果我要使用 'where' 方法,那么变量 database_billrate_value_normal 的类是什么?
    • Ruby 使用duck typing,因此无需键入变量。您还应该查看 Rails 的命名约定,例如用于 Active Record 的 this one 和用于控制器的 this one。还有许多其他非常好的来源。从 Rails 约定的基本知识开始可以避免很多麻烦。
    • 我的数据库中有一个表名 'Times',当我尝试对其运行查询时,结果 1=Times.where("id=?","1") 我收到一个错误消息“NameError(未初始化的常量 Activity::Times):”
    • 是否有 id 为 1 的 Times 实例?如果是这样,您可以使用Times.find(1)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-20
    • 1970-01-01
    • 1970-01-01
    • 2013-12-23
    • 2012-09-30
    • 1970-01-01
    相关资源
    最近更新 更多