我有一个应用,管理员必须在购买产品之前为每位用户创建自定义价格。一个pricing
belongs_to
一个user
和一个product
,一个user
has_many
pricings
和一个product
{ {1}} has_many
。路线是这样的:
pricings
在 devise_for :users, :controllers => { registrations: 'registrations' }
resources :users, only: [:show]
resources :products do
resources :pricings
end
页面上,我正在尝试获取该用户的users#show
列表。我的pricings
:
users_controller
这是我的def show
@user = User.find(params[:id])
@products_with_pricing = Product.joins(:pricings).group("products.id").having("count(products.id) > ?",0)
end
观点:
users#show
如果我省略<% @products_with_pricing.each do |product| %>
<% if product.pricing.user == current_user %>
<%= product.name %>
<% end %>
<% end %>
语句,则显示所有pricings
的所有产品名称,但是使用该语句,我在if语句行中收到if ....== current_user
错误,该错误表示:
未定义的方法&#39;定价&#39;因为#你呢? 意思? pricings`
有人能否直截了当地确定实现这一目标的最佳途径?
答案 0 :(得分:2)
产品 has_many pricings
这意味着要获得产品的价格,您需要致电product.pricings
,这将返回一组价格。您看到的错误是正确的,产品没有返回一个定价对象的pricing
方法,它有pricings
方法返回许多定价。
如果您的目标是仅获取其定价也属于该用户的产品,我建议您调整SQL查询以实现此目的
Product.joins(pricings: :users)
.where(pricings: { user: { id: current_user.id } })
.group("products.id")
.having("count(products.id) > ?",0)
注意:您可能需要在where和join
中混淆多个pricings和users这个查询引入了一个新的连接和一个where子句,它将过滤那些pricings的用户id为当前用户的产品,因此你根本不需要if语句