为什么我会得到NoM​​ethodError?

时间:2017-06-27 04:06:08

标签: ruby-on-rails redis friendly-id

我希望我的商家页面显示用户添加到购物车中的每个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,但这也无济于事。

1 个答案:

答案 0 :(得分:0)

修正了它。原来它被缓存了。我从中途存储item_id切换到item_slug,需要运行redis-cli flushall才能存储和访问正确的数据。