2017-07-26 78 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获取该记录。