2016-09-15 1 views
1

클라이언트는 다음과 같은 JSON을 보냅니다 : { "사용자": { "세 +": 18, "나이 -": 40}} 내 컨트롤러에서Ecto Query를 위해 JSON에서 값을 전달하는 방법은 무엇입니까?

나는 다음과 같은 한 :

def procura(conn, query) do 
    maior = conn.params["user"]["age+"] 
    menor = conn.params["user"]["age-"] 
query = from u in query, where: u.age > ^maior and u.age < ^menor, select: u.name 
    pesquisa = Repo.all query 
    IO.puts pesquisa 
end 

하지만 컴파일러 경고가 : ** (Protocol.UndefinedError) protocol Ecto.Queryable not implemented for %{}

어떻게 Ecto 쿼리에 대한 JSON 값을 전달합니까?

제 목표는 JSON 필드를 기반으로 쿼리를 수행하는 것입니다. x와 y 년 사이에있는 사용자를 쿼리하고 싶습니다. 자동 번역입니다.

+1

쿼리의 값이 무엇입니까? 당신은'% {}'을 질의 대신에'procura'의 두 번째 인자로 전달하는 것 같습니다. 또한,'from' 라인을'query = from u from query, ...'로 변경해야합니다. – Dogbert

+0

procura가 행동입니까? 그렇다면 쿼리 매개 변수가 요청에서 제거됩니다. Pls는 결과로 show에서 쿼리에 IO.inspect를 시도합니다. 지도 여야합니다. 액션 인 경우 연결을 반환해야합니다. – Haito

+0

안녕하세요! 내 목표는 JSON 필드를 기반으로 검색을 수행하는 것입니다. x와 y 년 사이에있는 사용자를 검색하고 싶습니다. 나는 가지 않는다. –

답변

2

당신은 무엇을하고 싶어 할 수있다 : 내 컨트롤러에서

내가 다음과 같습니다

def procura(conn, %{"user" => %{ "idade+" => maior, "idade-" => menor }}) do 
    query = from u in Module.Model, where: u.idade > ^maior and u.idade < ^menor, select: u.name 
    pesquisa = Repo.all query 
    IO.puts pesquisa 
    text conn, "Works" 
end 
관련 문제