我希望我的商家页面显示用户添加到购物车中的每个Item
的列表,而我很难理解为什么这个实现会给我一个NoMethodError
因此,在我的TradesController的#show
操作中,我有一个trade_ids
变量,其中包含$redis.smembers current_user_trade
返回的一系列已添加项目。然后我使用它来执行每个项的id的查找,并在我的视图中循环实例变量。
我的交易控制器:
class TradesController < ApplicationController
def show
trade_ids = $redis.smembers current_user_trade
@trade_items = Item.find(trade_ids)
end
def add
$redis.sadd current_user_trade, params[:item_id]
render json: current_user.trade_count, status: 200
end
def remove
$redis.srem current_user_trade, params[:item_id]
render json: current_user.trade_count, status: 200
end
private
def current_user_trade
"trade#{current_user.id}"
end
end
以下是我用于向current_user_trade
添加项目的方法:
class Item < ActiveRecord::Base
extend FriendlyId
friendly_id :slug, use: [:slugged, :finders]
def slug
[artist.parameterize, title.parameterize].join("-")
end
def trade_action(current_user_id)
if $redis.sismember "trade#{current_user_id}", id
"Remove from"
else
"Add to"
end
end
end
我的路线:
resource :trade, only: [:show] do
put 'add/:item_id', to: 'trades#add', as: :add_to
put 'remove/:item_id', to: 'trades#remove', as: :remove_from
end
然后在我的交易视图中我有一个基本的:
<% @trade_items.each do |item| %>
<p><%= item.title %></p>
etc
<% end %>
我最初的想法是,这与我一直使用FriendlyId进行slug生成这一事实有关。但是根据FriendlyId's doc,将:finders
添加到我的Item模型中的slug声明中应该按id重新启用查找。但事实并非如此。
我也试过重构这个以便它使用我的Items:slug,但这也无济于事。
答案 0 :(得分:0)
修正了它。原来它被缓存了。我从中途存储item_id
切换到item_slug
,需要运行redis-cli flushall
才能存储和访问正确的数据。