Ruby on Rails无法加载关注模块

时间:2014-09-30 09:37:55

标签: ruby-on-rails ruby

我已经在文件夹中初始化了一个模块"关注"位于: 的应用程序名称/应用/模型/关切

名为current_cart.rb

应用程序名称/应用/模型/关切/ current_cart.rb

module CurrentCart
  extend ActiveSupport::Concern

private

    def set_cart
        @cart = Cart.find(session[:cart_id])
    rescue ActiveRecord::RecordNotFound
        @cart = Cart.create
        session[:cart_id] = @cart.id
    end
end

我在我的控制器line_item_controllers中包含了这个:

应用程序名称/应用/控制器/ line_items_controller.rb

class LineItemsController < ApplicationController
  include CurrentCart

但是当我尝试在浏览器上执行时会产生此错误:

uninitialized constant LineItemsController::CurrentCart

app/controllers/line_items_controller.rb:2:in `<class:LineItemsController>'
app/controllers/line_items_controller.rb:1:in `<top (required)>'

3 个答案:

答案 0 :(得分:3)

如果我们谈论Rails 4,这里似乎没有什么问题 - 它应该是开箱即用的。

但是,你正在做的是轻微滥用所关注的问题。 而且你要定义models/concerns,你应该把它放在controllers/concerns中(为了便于阅读)。

对于这种情况,controller filters更合适。

class LineItemsController < ApplicationController
  before_action :set_cart

  private

  def set_cart
    @cart = Cart.find(session[:cart_id])
  rescue ActiveRecord::RecordNotFound
    @cart = Cart.create
    session[:cart_id] = @cart.id
  end  
end

答案 1 :(得分:1)

根据代码,我假设您正在跟随本书,&#34;使用Rails进行敏捷Web开发。&#34;

我建议您从以下位置移动代码:

appname/app/models/concerns/current_cart.rb

为:

appname/app/controllers/concerns/current_cart.rb

这样您就可以轻松地按照本书中的示例进行操作。

答案 2 :(得分:0)

遇到了同样的问题。对我来说这是一个简单的错误。它无法读取LineItemsController::CurrentCart,因为当我创建current_cart.rb时,它在末尾(在.rb之后)保存了一个aditional空格,。current_cart.rb(space)

所以在删除了白色的额外空间后,一切都很顺利。