2009-11-10 4 views
0

DataMapper/Sinatra를 사용하여 약간의 임의의 사진 JSON 피드를 만들려고 노력하고 있습니다. 여기에 내가 지금까지 무엇을 가지고 ..DataMapper 컬렉션을 무작위로 만들어 JSON으로 변환하려면 어떻게해야합니까?

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

그래서 잘 작동합니다. to_json 메소드는 dm-serializer 라이브러리에서 제공됩니다. 내가하고 싶은 일은 피드를 무작위로 추출하여 매번 같은 순서로 사진이 나타나지 않도록하는 것입니다. 나는 그 오류를 검색 ..

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

DataMapper가 내장되어 있지 않기 때문에 무작위 선택에 대한 지원, 나는 결과를 정렬하려고했으나 sort_by가 배열에 DataMapper :: 컬렉션을 전환하기 때문에 to_json 미친 얻는다 ActiveRecord와 경쟁하는 to_json 메서드 사이의 충돌에 관한 Rails 관련 작업은 많이 있었지만 DataMapper에 관한 내용은 전혀 없습니다. 많은 사람들이 json 보석 대신 json_pure을 사용하도록 권장했기 때문에 Sinatra 앱에 require 'json/pure'을 추가하여 시험해 보았습니다.

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

하지만 함께 구조체 객체를 반환하기 때문에이 정말 나를 위해 작동하지 않습니다 이제 위의 쿼리는

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

가 나는 또한 바로 SQL과 무작위 일을 시도 .. 나 대신이 오류를 제공 실제 Photo 클래스의 인스턴스가 아니라 속성. 이것은 :methods과 같은 편리한 to_json 인수를 활용할 수 없다는 것을 의미합니다.

마지막으로 find_by_sql을 사용해 보았습니다. 그러나이 방법은 DataMapper에서 제거 된 것 같습니다.

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

sheesh! 이 문제를 해결하는 방법에 대한 의견이 있으십니까?

답변

2

find_by_sql 메소드가 dm-ar-finders 플러그인으로 이동되었습니다.

+0

팁을 보내 주셔서 감사합니다. dkubb. dm-ar-finders 젬을 설치하면 find_by_sql 메쏘드에 접근 할 수있게되었지만 상황이 여전히 올바르지 않습니다 : 이제 Photos.random을 호출 할 수 있습니다. 그러나 find_by_sql 쿼리와 명명 된 스코프를 섞어서 사진을 만들 수는 없습니다. .random.favorites. 그래도 괜찮습니다. 모든 조건을 SQL 문 자체에 넣었지만 to_json 메서드는 메서드 인수 만 전달하면 작동합니다. 그러면 데이터베이스의 모든 사진에 대한 JSON 피드가 표시됩니다. 음 .. – Zeke

관련 문제