2

我有一个带有 mongoid 的脚手架应用程序并做了:rails g bootstrap:install

但是当我说:

rails g bootstrap:themed Contratos

我有这个错误:

/usr/local/rvm/gems/ruby-1.9.3-p327/gems/twitter-bootstrap-rails-2.1.6/lib/generators/bootstrap/themed/themed_generator.rb:59:in block in columns': undefined method 'columns' for Contrato:Class (NoMethodError)
4

2 回答 2

1

查看主题生成器的源代码:

  def columns
    excluded_column_names = %w[id created_at updated_at]
    if defined?(ActiveRecord)
      rescue_block ActiveRecord::StatementInvalid do
        @model_name.constantize.columns.reject{|c| excluded_column_names.include?(c.name) }.collect{|c| ::Rails::Generators::GeneratedAttribute.new(c.name, c.type)}
      end
    else
      rescue_block do
        @model_name.constantize.fields.collect{|c| c[1]}.reject{|c| excluded_column_names.include?(c.name) }.collect{|c| ::Rails::Generators::GeneratedAttribute.new(c.name, c.type.to_s)}
      end
    end
  end

您面临的问题是您的应用程序定义了 ActiveRecord 但您的 ar 使用 Mongoid。

您应该将文件中的行替换require 'rails/all'application.rb以下行:

require "action_controller/railtie"
require "action_mailer/railtie"
require "active_resource/railtie"
require "rails/test_unit/railtie"

有关 Mongoid 安装的更多信息,请参见:http: //mongoid.org/en/mongoid/docs/installation.html

于 2012-11-13T15:17:46.653 回答
0

您所要做的就是为您的 Mongoid 模型添加一个“列”类方法,以便生成器仍然正确响应:

def self.columns
  self.fields.collect{|c| c[1]}
end

这种方法基于 Nicolas Garnil 的回应并为我工作。

于 2013-01-31T22:04:59.873 回答