为什么我得到 NoMethodError?

why do i get NoMethodError?

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

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