【发布时间】:2019-06-18 21:33:29
【问题描述】:
我正在构建电子商务应用程序,您可以在其中为产品设置用户特定的价格。如果没有为特定用户设置特定产品的价格,它将显示默认产品价格。
它工作正常,但我正在寻找更有效的解决方案,因为我对当前的解决方案不满意。
表格:
- 用户
- 产品(所有产品信息 + 常规价格)
- 价格(user_id、product_id、user_price)
型号:
class User < ApplicationRecord
has_many :prices
end
class Product < ApplicationRecord
has_many :prices
validates :name, presence: true
def self.with_user_prices(current_user)
Product.joins(
Product.sanitize_sql_array(['LEFT OUTER JOIN prices ON prices.user_id = ?
AND products.id = prices.product_id', current_user])
).select('products.*, prices.user_price')
end
end
class Price < ApplicationRecord
belongs_to :product
belongs_to :user
end
如何在控制器中获取所有具有用户特定价格的产品:
@products = Product.with_user_prices(current_user)
我如何在视图中显示它们:
<% @products.each do |product| %>
<%= product.user_price ? product.user_price : product.regular_price %>
<% end %>
如您所见,我目前正在加入价格表,然后在视图中显示 user_price(价格表)(如果存在),否则显示常规价格(产品表)。
我很想在一个查询中解决所有问题,根据 current_user 只保留一个具有适当值的价格列
【问题讨论】:
-
你的数据库引擎是什么?
-
@MarekLipka 目前我正在使用开发 SQLite3 数据库
-
那我的回答应该是有效的。
标签: ruby-on-rails