2017-07-26 81 views
1

我來自鐵軌背景(與許多Elixir人一樣)。我目前的問題是,我試圖查詢特定的記錄。對於我來說,這對於鐵路來說並不是一件容易的事,但我似乎無法在鳳凰城找到它。這是我想要做的:查詢記錄上的ID - Phoenix和Elixir

我有一個Location表has_many Monitors和監視器有一個不是一個號碼。這些號碼僅適用於某個位置,因此我無法僅通過顯示器號碼找到特定的顯示器。所以我必須將其範圍擴大到它所屬的位置。在Rails我會做這樣的事情:

location = Location.find(params[:location_id]) 

monitor = location.monitors.find_by(number: params[:monitor_number]) 

易peasy使用Rails的活動記錄,但我該怎麼做鳳凰?這是我目前的嘗試,並非如我所料。

monitor_query = from m in Monitor, 
    where: m.location_id == ^upload_params["location_id"], 
    where: m.number == ^upload_params["monitor_number"], 
    select: m.id 

monitor = Repo.all(monitor_query) 

這是拔出錯誤的ID,我不知道它在做什麼。任何人都可以告訴我這個幫助嗎?

回答

5

的是最簡單的轉換Rails代碼會是這樣:

location = Repo.get(Location, params["location_id"]) 
monitor = Repo.get_by(Ecto.assoc(location, :monitors), number: params["monitor_number"]) 

Ecto.assoc(location, :monitors)返回查詢這基本上from m in Monitor, where: m.location_id == ^location.id。然後我們添加更多約束(where: m.number == ^params["monitor"])並使用Repo.get_by獲取該記錄。