Bit*_*ise 1 ruby-on-rails elixir ecto phoenix-framework
我来自铁轨背景(像许多Elixir人一样).我目前的问题是我正在尝试查询特定记录.对于我来说,这对我来说毫无疑问,但我似乎无法在凤凰城找到它.这是我正在尝试做的事情:
我有一个Location
has_many表,Monitors
Monitor有一个不是ID的数字.这些号码只对一个位置是唯一的,所以我不能简单地找到只有监视器编号的特定监视器.所以我必须将它范围扩展到它所属的位置.在Rails中我会做这样的事情:
location = Location.find(params[:location_id])
monitor = location.monitors.find_by(number: params[:monitor_number])
Run Code Online (Sandbox Code Playgroud)
使用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)
Run Code Online (Sandbox Code Playgroud)
这是错误的ID,我不确定它在做什么.任何人都可以告诉我这个吗?
该Rails代码最直接的转换是:
location = Repo.get(Location, params["location_id"])
monitor = Repo.get_by(Ecto.assoc(location, :monitors), number: params["monitor_number"])
Run Code Online (Sandbox Code Playgroud)
Ecto.assoc(location, :monitors)
返回基本上的查询from m in Monitor, where: m.location_id == ^location.id
.然后我们为它添加更多约束(where: m.number == ^params["monitor"]
)并使用获取该记录Repo.get_by
.
归档时间: |
|
查看次数: |
163 次 |
最近记录: |