English 中文(简体)
How can I randomize DataMapper collection and convert it to JSON?
原标题:

I m pulling my hair out trying to build a little random photo JSON feed using DataMapper/Sinatra. Here s what I have so far..

Photo.favorites.to_json(:methods => [:foo, :bar])

So that works fine. The to_json method is provided in the dm-serializer library. All I want to do is randomize that feed so the photos don t show up in the same order every time. Since DataMapper doesn t have built-in support for random selects, I tried sorting the results, but to_json gets mad because the sort_by turns the DataMapper::Collection into an Array..

Photo.favorites.sort_by{rand}.to_json(:methods => [:foo, :bar])
# wrong argument type Hash (expected Data)

I searched for that error and saw a lot of Rails-related stuff about ActiveRecord and conflicts between competing to_json methods, but nothing really about DataMapper. A lot of people recommended using json_pure instead of the json gem, so I gave that a try by adding require json/pure to my Sinatra app. Now the query above gives me this error instead..

Photo.favorites.sort_by{rand}.to_json(:methods => [:foo, :bar])
# undefined method `[]  for #<JSON::Pure::Generator::State:0x106499880>

I also tried doing the randomization with straight SQL:

def self.random
  repository(:default).adapter.query( SELECT * FROM photos WHERE favorite = 1 ORDER BY RAND(); )
end

But that doesn t really work for me because it returns Struct objects with attributes, rather than instances of the actual Photo class. This means I can t leverage the handy to_json arguments like :methods.

Lastly I tried using find_by_sql, but I guess the method s been removed from DataMapper?

def self.random
  find_by_sql("SELECT * FROM `photos` ORDER BY RAND();")
end
# undefined method `find_by_sql  for Photo:Class

Sheesh! Any thoughts on how to resolve this?

问题回答

The find_by_sql method was moved to the dm-ar-finders plugin.





相关问题
SQL SubQuery getting particular column

I noticed that there were some threads with similar questions, and I did look through them but did not really get a convincing answer. Here s my question: The subquery below returns a Table with 3 ...

难以执行 REGEXP_SUBSTR

I m 查询Oracle 10g。 我有两张表格(样本数据见下文)。 i m 试图提取一些领域

SQL Query Shortcuts

What are some cool SQL shorthands that you know of? For example, something I learned today is you can specify to group by an index: SELECT col1, col2 FROM table GROUP BY 2 This will group by col2

PHP array callback functions for cleaning output

I have an array of output from a database. I am wondering what the cleanest way to filter the values is example array Array ( [0] => Array ( [title] => title 1 ...

OracleParameter and DBNull.Value

we have a table in an Oracle Database which contains a column with the type Char(3 Byte). Now we use a parameterized sql to select some rows with a DBNull.Value and it doesn t work: OracleCommand ...

Running numbers in SQL

I have a SQL-statement like this: SELECT name FROM users WHERE deleted = 0; How can i create a result set with a running number in the first row? So the result would look like this: 1 Name_1 2 ...

How to get SQL queries for each user where env is production

I’m developing an application dedicated to generate statistical reports, I would like that user after saving their stat report they save sql queries too. To do that I wrote the following module: ...

热门标签