繁体   English   中英

NoMethodError-Ruby中AWS-SDK中User:Class的未定义方法'where'

[英]NoMethodError - undefined method 'where' for User:Class in aws-sdk for ruby

我是DynamoDB的新手。 我使用aws-sdk作为ORM来处理红宝石,当我尝试执行User.where('name'=>'Joe')User.all(:where => {:name => 'Joe'}) aws-sdk是否支持此功能,或者是否有其他方法可以实现此功能? 我的模特看起来像

class User < AWS::Record::HashModel
  string_attr :name
end

谢谢。


错误日志:

在2014-04-10 09:46:39 -0400 HTML中以12ms.0.1的GET“ / users”身份启动UsersController#index处理HTML,在3毫秒内完成500内部服务器错误

NoMethodError( 'where' for User:Class): app/controllers/users_controller.rb:6:in未定义方法'where' for User:Class): app/controllers/users_controller.rb:6:in index'

HashModel似乎不完整,仅在AWS :: Record :: Model(SimpleDB)支持的地方。

我发现的最简单方法是回退到dynamo_db_table对象。

对于任意参数,请使用SCAN:

User.dynamo_db_table.items.where(name: 'Joe').select('id', 'surname').map(&:attributes)
User.dynamo_db_table.items.where(name: 'Joe', birthday: ('2014-04-10'..'2014-04-17')).select(*User.attributes.keys).map(&:attributes)
User.dynamo_db_table.items.where(name: 'Joe', birthday: ('2014-04-10'..'2014-04-17')).select(*User.attributes.keys, limit: 1).map(&:attributes)

对于使用hash_key进行查询,请使用QUERY:

User.dynamo_db_table.items.query(hash_value: 'Joe', select: User.attributes.keys).map(&:attributes)
User.dynamo_db_table.items.query(hash_value: 'Joe', select: User.attributes.keys, limit: 1).map(&:attributes)
User.dynamo_db_table.items.query(hash_value: 'Joe', select: User.attributes.keys, limit: 1, scan_index_forward: false).map(&:attributes)
User.dynamo_db_table.items.query(hash_value: 'Joe', range_value: '2014-04-10'..'2014-04-17', select: [:birthday], limit: 1, scan_index_forward: false).map(&:attributes)

此处的更多信息: http : //docs.aws.amazon.com/AWSRubySDK/latest/AWS/DynamoDB/ItemCollection.html#query-instance_method

根据错误, User类没有一个在其或其任何祖先where存在的where命名的类方法。

而是使用User.all(:where => { :name => 'Joe' })

请参阅AWS :: Record :: HashModel类的文档

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM