2017-07-26 10 views
1

私は多くのElixirの人のように、レールの背景から来ています。私の現在の問題は、私が特定のレコードを照会しようとしていることです。これは私のためのレールのないブレーンナですが、私はフェニックスでそれを把握するように見えることはできません。ここで私がやろうとしているものです:レコードのIDを問い合わせる - PhoenixとElixir

私はMonitorsをHAS_MANY Locationテーブルを持っており、モニタがIDでない番号があります。これらの番号はロケーションに固有のものなので、モニター番号だけでは特定のモニターを見つけることができません。だから私はそれが属している場所にそれをスコープする必要があります。

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

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

簡単Railsのアクティブなレコードと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

ことの最も直接的な変換は、コードはこのことでしょうレール:基本的にfrom m in Monitor, where: m.location_id == ^location.idのクエリを返すEcto.assoc(location, :monitors)

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

。さらにそれに制約を追加し(where: m.number == ^params["monitor"])、Repo.get_byを使用してそのレコードをフェッチします。

関連する問題