0

在使用 has_many 为其集合提供的任何方法(例如“where”)时,我无法找到为什么在我的视图中出现以下错误:

NameError in History/hist_paquets_mesures#show Showing /var/www-opf/opf/app/views/history/hist_paquets_mesures/show.html.haml 其中第 19 行出现: 未初始化的常量 HistPaquetMesures::HistVersionsPaquetsMesure

我的(HAML)视图中导致此问题的部分:

// I want to make this work
//= @hist_paquet_mesures.hist_versions_paquets_mesures.where(:hist_origine_modification == nil).first.version
// So I debug with this, which is causing the same error
= debug @hist_paquet_mesures.hist_versions_paquets_mesures

我为在config/initializers/inflections.rb中使用的特殊单复数名称设置了一个例外:

  ActiveSupport::Inflector.inflections do |inflect|
    inflect.irregular 'pub_liste_horizon', 'pub_listes_horizon'
    inflect.irregular 'hist_paquet_mesures', 'hist_paquets_mesures'
    inflect.irregular 'hist_projet_connexe', 'hist_projets_connexes'
    inflect.irregular 'hist_version_paquet_mesures', 'hist_versions_paquets_mesures'
    inflect.irregular 'hist_origine_modification', 'hist_origines_modification'
  end

复数单数分类方法在 rails 控制台上按预期工作:

"hist_versions_paquets_mesures".singularize  => "hist_version_paquet_mesures"
"hist_versions_paquets_mesures".classify  => "HistVersionPaquetMesures"
"hist_version_paquet_mesures".pluralize  => "hist_versions_paquets_mesures"

我的app/model/hist_paquet_mesures.rb模型:

class HistPaquetMesures < ActiveRecord::Base
  belongs_to :pub_indice
  belongs_to :pub_liste_horizon
  belongs_to :admin_utilisateur
  has_many :hist_versions_paquets_mesures
end

我的app/model/hist_version_paquet_mesures.rb模型:

class HistVersionPaquetMesures < ActiveRecord::Base
  belongs_to :hist_paquet_mesures
  belongs_to :pub_modification
  belongs_to :vers_origine, :class_name => 'HistOrigineModification', :foreign_key => 'hist_origine_modification_id'
  # polymorphic association
  has_one :comme_origine, :class_name => 'HistOrigineModification', as: :hist_origine
end

我的app/controllers/history/hist_paquets_mesures_controller.rb控制器:

class History::HistPaquetsMesuresController < ApplicationController
  def show
    @hist_paquet_mesures = HistPaquetMesures.find_by_id(params[:id])
    respond_with(:history, @hist_paquet_mesures)
  end
end

奇怪的是“s”在错误消息的“HistVersionsPaquetsMesure”中的位置:HistPaquetMesures::HistVersionsPaquetsMesure

不应该是 HistPaquetMesures::HistVersionPaquetMesures 吗?为什么我有这个结果?

欢迎任何帮助

4

2 回答 2

1

尝试在以下位置使用 :class_name 参数:

has_many :hist_versions_paquets_mesures, :class_name => HistVersionPaquetMesures

您的协会名称可能有问题。

于 2013-01-14T11:02:23.360 回答
0

这是一个BUG!

我就这个案子开了一个问题。看来问题来自 ActiveSupport 库。为了获得类名,它执行“camelize.singularize”。由于我的变形是用下划线定义的,因此预期的结果是不正确的。如果图书馆执行了“singularize.camelize”,它就会起作用。

解决方法:使用骆驼语法添加另一个不规则变形。

于 2013-01-14T13:07:37.000 回答