[英]Ruby on Rails cannot load concern module
我已经在以下文件夹中的“关注点”中初始化了一个模块: appname / app / models / concerns
叫做current_cart.rb
appname / app / models / concerns / 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中:
appname / app / 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)>'
如果我们在谈论Rails 4,那么这里似乎没有什么错-它应该开箱即用。
但是,您正在做的是对所关注问题的轻微滥用。 并且您正在定义models/concerns
,应该将其放在controllers/concerns
(出于可读性controllers/concerns
)。
对于这种情况, 控制器过滤器更为合适。
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
根据代码,我假设您正在跟着《用Rails进行敏捷Web开发》这本书。
我建议您将代码从以下位置移开:
appname/app/models/concerns/current_cart.rb
至:
appname/app/controllers/concerns/current_cart.rb
这将使您最轻松地遵循本书中的示例。
有同样的问题。 对我来说,这是一个简单的错误。 它无法读取LineItemsController::CurrentCart
因为当我创建current_cart.rb
它的末尾带有附加空白(.rb之后),例如._current_cart.rb current_cart.rb(space)
因此,删除白色多余的空格后,一切都很好。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.