NoMethodError - 用户的未定义方法'where':用于ruby的aws-sdk中的类

时间:2014-04-09 15:46:42

标签: ruby-on-rails ruby amazon-web-services amazon-dynamodb

我是DynamoDB的新手。我使用aws-sdk作为ORM的ruby,当我尝试执行User.where('name'=>'Joe')User.all(:where => {:name => 'Joe'})时出现以下错误。这是支持aws-sdk还是有任何其他方法来实现这一点。我的模型看起来像

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

感谢。


错误日志:

开始GET&#34; / users&#34;在2014-04-10 09:46:39 -0400为127.0.0.1 由UsersController处理#index为HTML 在3毫秒内完成500内部服务器错误

NoMethodError(未定义的方法'where' for User:Class): app/controllers/users_controller.rb:6:in索引&#39;

2 个答案:

答案 0 :(得分:1)

似乎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)

使用QUERY:

进行hash_key查询
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

答案 1 :(得分:0)

根据错误,User类没有名为where的类方法,或者存在于其任何祖先中。

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

请参阅 AWS::Record::HashModel Class

的文档