【问题标题】:Rails instance method class errorRails 实例方法类错误
【发布时间】:2015-07-10 00:14:40
【问题描述】:

我想制作一个购物车,并且我在 rails 中创建了一个名为 ShoppingCart 的新类。在类中,我有一个名为 total_qualtity 的实例方法。 我在 View 中调用这个类并尝试调用实例方法,但我得到了

“Default#index 中的 NoMethodError”“未定义方法 `total_quantity' for "#":String"。请帮我修复它。

这是我的 ShoppingCart.rb

class ShoppingCart
attr_accessor :items
def initialize items = Hash.new
    @items = items
end

def total_quantity
    total = 0
    @items.each do |key, value| 
        total += value.to_i
    end
    return total
end

这是我的 DefaultView.html.erb

<% @cart = session[:cart] || ShoppingCart.new
  session[:cart] = @cart
  puts session[:cart].total_quantity  --> This is place i got error
%>
<div id="header" class="container">
<nav class="navbar navbar-default">
<div class="navbar-header col-sm-4 col-md-3">
  <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#bs-example-navbar-collapse-1">
    <span class="sr-only">Toggle navigation</span>
    <span class="icon-bar"></span>
    <span class="icon-bar"></span>
    <span class="icon-bar"></span>
  </button>
  <a class="navbar-brand" href="#"><%= image_tag 'logo.png'%></a>
</div>
</nav>
</div>

【问题讨论】:

  • 您是在字符串上调用它,而不是在购物车上。
  • 你能解释一下吗?我不明白为什么它包含一个字符串
  • 其他东西将某些东西放入会话中,它是一个字符串。
  • 您不能在会话中存储对象。看这里stackoverflow.com/questions/22978704/…
  • @DaveNewton,我从不在会话中分配任何类型的文本或字符串

标签: ruby-on-rails ruby ruby-on-rails-4 shopping-cart instance-methods


【解决方案1】:

将购物车 ID 存储在会话不完整对象中,并从该 ID 中检索 ShoppingCart 对象。 在控制器中执行此操作

Eg: session[:cart_id] 
@cart  = ShoppingCart.find(session[:cart_id])

并将@cart 对象传递给视图并像那样使用

@cart.total_quantity

【讨论】:

  • 我的 ShoppingCart 是一个没有 ActiveRecord::Base 的类。所以我不能使用 find 方法。
【解决方案2】:

您将对象作为String 分配给session[:cart_id]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-11
    • 1970-01-01
    • 1970-01-01
    • 2016-01-28
    • 2011-04-24
    • 1970-01-01
    相关资源
    最近更新 更多