2015-07-06 14 views
5

Bazı JSON Verilerini, Phoenix'teki API Çağrılarımdan birine geri döndürmeye çalışıyorum. Subject tüm kayıtlarını alıyorum ve onları gönderiyor ama Ecto istemediğim bazı ek alanlar döndürüyor.Phoenix'te Ecto'yu kullanarak veri getirirken yalnızca belirli alanları al

ben ne yapabilirim için:

  • sadece belirli özelliklerini (Örn sadece id ve name) alın
  • Değil olsun benim tepki olarak gereksiz alanlar

(örneğin __meta__ olarak ve __owner__)

Bu benim Controller adresim:

Bubenim View geçerli:

[ 
    { 
     "teachers": { 
      "__owner__": "Elixir.MyApp.Subject", 
      "__field__": "teachers", 
      "__cardinality__": "many" 
     }, 
     "updated_at": "2015-06-20T15:32:20Z", 
     "topics": { 
      "__owner__": "Elixir.MyApp.Subject", 
      "__field__": "topics", 
      "__cardinality__": "many" 
     }, 
     "name": "Physics", 
     "inserted_at": "2015-06-20T15:32:20Z", 
     "id": 1, 
     "__meta__": { 
      "state": "loaded", 
      "source": "subjects" 
     } 
    }, 
    { 
     "teachers": { 
      "__owner__": "Elixir.MyApp.Subject", 
      "__field__": "teachers", 
      "__cardinality__": "many" 
     }, 
     "updated_at": "2015-06-20T15:37:59Z", 
     "topics": { 
      "__owner__": "Elixir.MyApp.Subject", 
      "__field__": "topics", 
      "__cardinality__": "many" 
     }, 
     "name": "Chemistry", 
     "inserted_at": "2015-06-20T15:37:59Z", 
     "id": 2, 
     "__meta__": { 
      "state": "loaded", 
      "source": "subjects" 
     } 
    }, 
    { 
     "teachers": { 
      "__owner__": "Elixir.MyApp.Subject", 
      "__field__": "teachers", 
      "__cardinality__": "many" 
     }, 
     "updated_at": "2015-06-20T15:38:41Z", 
     "topics": { 
      "__owner__": "Elixir.MyApp.Subject", 
      "__field__": "topics", 
      "__cardinality__": "many" 
     }, 
     "name": "Mathematics", 
     "inserted_at": "2015-06-20T15:38:41Z", 
     "id": 3, 
     "__meta__": { 
      "state": "loaded", 
      "source": "subjects" 
     } 
    }, 
    { 
     "teachers": { 
      "__owner__": "Elixir.MyApp.Subject", 
      "__field__": "teachers", 
      "__cardinality__": "many" 
     }, 
     "updated_at": "2015-06-22T15:40:17Z", 
     "topics": { 
      "__owner__": "Elixir.MyApp.Subject", 
      "__field__": "topics", 
      "__cardinality__": "many" 
     }, 
     "name": "Biology", 
     "inserted_at": "2015-06-22T15:40:17Z", 
     "id": 4, 
     "__meta__": { 
      "state": "loaded", 
      "source": "subjects" 
     } 
    } 
] 

cevap

11

için görünümünüzü değiştirin: Bu benim cevap

# View 
def render("index.json", %{subjects: subjects}) do 
    subjects 
end 

olduğu Ayrıca

def render("index.json", %{subjects: subjects}) do 
    Enum.map(subjects, &Map.take(&1, [:id, :name])) 
end 

, ayrıca dönmek için Ecto sorabilirsiniz denetleyicinizi değiştirerek alanların bir alt kümesini:

def index(conn, _) do 
    subjects = from(s in Subject, select: %{id: s.id, name: s.name}) |> Repo.all 
    conn |> render subjects: subjects 
end 
+0

Cevabınız için teşekkürler. Belirli alanları nasıl seçeceğimi anlıyorum, ancak belirli bir alanı reddetmek ve her şeyi almak istersem. Örneğin, yukarıdaki örnekte 'öğretmenler' ve 'konular' istemiyorsam. – Sheharyar

+2

'Map.take/2'' Map.drop/2' olarak değiştirin. Tüm harita fonksiyonlarını http://elixir-lang.org/docs/stable/elixir/ adresinde bulabilirsiniz. –

İlgili konular