我是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;
答案 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' })
。