gpt4 book ai didi

ruby-on-rails - Ransack:显示按 Ransack 排序的 has_many 关系的属性

转载 作者:太空宇宙 更新时间:2023-11-03 16:14:21 26 4
gpt4 key购买 nike

我有一个 Commodity(name:string) 模型和一个 Price(amount:float) 模型:

class Commodity < ApplicationRecord
has_many :prices
end

class Price < ApplicationRecord
belongs_to :commodity
end

因此,一种商品可以有多种价格。

我有一个商品的 Ransack 搜索表单,它显然可以让用户搜索商品。我希望包含一个 sort_link(@q, :prices_amount) 排序过滤器。点击此链接将显示所有商品按价格排序(如果一个商品有多个价格,该商品将显示多次,每个重复的商品价格相应显示)。目前,Ransack 确实多次显示商品(与每种商品的价格数量一样多),但我不知道如何为每个重复的商品显示该价格。

我想知道如何在前端显示该价格。我通过以下方式显示查询结果:

<%=@commodities.each do |commodity|%>
<%=commodity.name%>
<%=commodity.prices.first.amount%> <!-- In place of prices.first, I was to display the amount that Ransack found -->
<%end%>

我现在使用 prices.first.amount 作为占位符。我如何用 Ransack 在排序时找到的 数量 替换它?

最佳答案

我建议创建一个范围以将价格包含在 Commodity 实例中。例如

class Commodity < ApplicationRecord
scope :with_price, -> {joins(:prices).select("commodities.*, prices.amount as price_amount")}
end

这将在您的 Commodity 实例上创建一个虚拟属性 price_amount

在 Controller 中它会是这样的

@q = Commodity.ransack(params[:q])
@commodities = @q.result.with_price

假设您将这些“显示”为表格,您可以使用以下命令显示结果

<table>
<thead>
<tr>
<th><%= sort_link(@q, :name, 'Commodity' %></th>
<th><%= sort_link(@q, :prices_amount, 'Price') %></th>
</tr>
</thead>
<tbody>
<% @commodities.each do |commodity| %>
<tr>
<td><%= commodity.name %></td>
<td><%= number_to_currency(commodity.price_amount) %></td>
</tr>
<% end %>
</tbody>
</table>

关于ruby-on-rails - Ransack:显示按 Ransack 排序的 has_many 关系的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50736846/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com