Ruby on Rails。未初始化的常数

Nemoden

这很奇怪,但是:

上传器类(应用程序/上传器):

class ImageUploader < CarrierWave::Uploader::Base
  include CarrierWave::RMagick

  # ....

  version :thumb, from_version: :preview do
    process resize_to_limit: [Image::THUMB_WIDTH]
  end

图片类(应用/模型):

class Image < ActiveRecord::Base
  include Rails.application.routes.url_helpers
  mount_uploader :image, ImageUploader

  THUMB_WIDTH = 220
  PREVIEW_WIDTH = 460
  MAX_WIDTH = 960

该应用程序说:

uninitialized constant Image::THUMB_WIDTH

  version :thumb, from_version: :preview do
    process resize_to_limit: [Image::THUMB_WIDTH] #<<<----
  end

  version :preview, from_version: :fullsize do

怎么了?

更新:

阿吉斯指出了原因。

悬赏金将在2天之内得到最佳解决方案。我不喜欢代码分离,例如在初始化器中创建一个新类,以容纳Image类的所有常量。这种解决方案很糟糕,因为它带来了不一致性和代码碎片。

博博佐

一般答案

就rails autoloader而言,您有一个鸡或鸡蛋的盒子,从一般意义上来说,解决此问题的“ rails方法”将是重构元代码,以便将类名作为字符串值而不是类传递,例如:

belongs_to :manager, class_name: "Employee"

belongs_to希望在所有课程都加载完毕后召集人员constantizeclass_name以便避免“鸡蛋和鸡蛋”的“铁轨方式”。

什么@Stoic建议实质上是回避的评价这一主题的变化image.rb,在image_uploader.rb加载时间:

model.class.const_get("THUMB_WIDTH")

也可能被表述为:

'Image'.constantize.const_get("THUMB_WIDTH")

结果是相同的,并且从中得出的一般教训是:避免在类加载时代码中使用另一个类名文字,或者换句话说,这belongs_to :manager, class_name: "Employee"是好事,belongs_to :manager, class_name: Employee也可能是坏事。

它不是很漂亮,但是它可能是避免这些头痛的最优雅的通​​用方式


问题特定答案

解决问题的另一种方法是,缩略图图标的宽度实际上是上传者关心的问题,而不是模型的问题,实际上,您看到的是不适当的亲密代码气味的边缘情况(http://www.codinghorror。 com / blog / 2006/05 / code-smells.html)。

当心那些花太多时间在一起的课程,或者以不适当的方式进行接口的课程。班级之间应尽可能少地了解彼此。

因此,如果您具有这种思想流派(我正朝着这个方向发展),解决方案将是使班级THUMB_WIDTH保持不变,ImageUploader然后问题就会消失。

无论如何,将不同的领域关注点从模型中分离出来通常是一个好主意,因为这些模型喜欢变得肿且难以管理-您可以将上载器类视为模型的服务类,旨在以相同的方式提取特定的领域问题值对象,表单对象等在http://blog.codeclimate.com/blog/2012/10/17/7-ways-to-decompose-fat-activerecord-models/中进行处理


计划C将config.autoload_paths在您application.rb和食指之间切换位置:)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Ruby on Rails“未初始化的常量”错误

来自分类Dev

未初始化的常量ActionView :: CompiledTemplates :: FB Ruby on Rails

来自分类Dev

Ruby on Rails“未初始化的常量”错误

来自分类Dev

Ruby on Rails 5未初始化的常量ApplicationRecord(NameError)

来自分类Dev

Ruby on Rails:未初始化的常量 UserController::ReportUserMailer

来自分类Dev

未初始化的常量Ruby

来自分类Dev

未初始化的常量Ruby

来自分类Dev

Ruby-未初始化的常量

来自分类Dev

Ruby 中的未初始化常量

来自分类Dev

Ruby NameError:未初始化的常量

来自分类Dev

Rails错误-未初始化的常数

来自分类Dev

Rails未初始化的常数

来自分类Dev

Ruby on Rails-NameError:/ admin / users中未初始化的常量UsersController

来自分类Dev

未初始化的常量ActiveSupport :: EventedFileUpdateChecker(NameError)-[learn-ruby-on-rails]教程

来自分类Dev

Ruby on Rails:全新项目中的未初始化常量

来自分类Dev

Ruby错误-未初始化的常量OpenStruct(NameError)

来自分类Dev

Ruby入门指南:未初始化的常量PostsController :: Posts

来自分类Dev

Ruby类中的未初始化常量错误

来自分类Dev

Ruby NameError,未初始化的常量,使用Prawn

来自分类Dev

Ruby:未初始化的常量ATMSystem :: BankComputer(NameError)

来自分类Dev

Ruby Require不起作用/未初始化的常量

来自分类Dev

Ruby超级初始化未正确传递参数

来自分类Dev

rails admin未初始化的常数Country :: Person

来自分类Dev

Rails路由错误“未初始化的常数”

来自分类Dev

Ruby/Rails 类变量何时初始化?

来自分类Dev

Ruby on Rails 4中的“ NameError:未初始化的常量新闻通讯”,但未在开发中

来自分类Dev

Ruby数组初始化

来自分类Dev

Ruby:条件初始化

来自分类Dev

Ruby类初始化

Related 相关文章

热门标签

归档