Mongo + RoR模型。坚持NoMethodError

时间:2013-03-28 10:46:56

标签: ruby-on-rails ruby mongodb model nomethoderror

我的一个模型中有NoMethodError的问题。

在日志文件中,我们有:

   NoMethodError (undefined method `length=' for #<Book:0x000000083866b8>):
2013-03-28T10:25:19+00:00 app[web.1]:   app/models/engine/book.rb:13:in `block in find_or_create_by_guide'
2013-03-28T10:25:19+00:00 app[web.1]:   app/models/engine/book.rb:9:in `find_or_create_by_guide'

让我查看所有重要文件。

首先,我们有Mongo的document.rb:

   class Guide::Document
  include MongoMapper::Document
  key :city, Integer
  key :trips, Array
  key :themes, Array
  key :places, Array
  key :pace, String
  key :date_from, Time
  key :date_to, Time
  key :host, String
  key :length, Integer
  timestamps!
end

然后,在指南文件中调用书籍模型:

module ClassMethods
  def find_or_create_by_guide(guide)
    book = ::Book.find_or_create_by_document(guide.id.to_s) do |b|
      b.city_id = guide.city
      b.host    = guide.host
      b.pace    = guide.pace || :normal
      b.length  = guide.length
    end

稍后在book.rb中,我有以下几行:

groups = sorted_points.in_groups_of(self.length.count, false)

Length.rb

  class Length < ActiveRecord::Base
  belongs_to :book

  attr_accessible :book_id
end

Book.rb

attr_accessible :user_id, :country_id, :city_id, :hotel_id, :type, :price, :host, :pace, :created_at, :updated_at, :length

最后,长度的迁移:

class AddLengthColumnToBooks < ActiveRecord::Migration
  def change
    add_column :books, :length, :integer
  end
end

任何提示或提示表示赞赏。

1 个答案:

答案 0 :(得分:0)

这是一团糟。一旦你想让'length'成为Book的一个属性,一旦你希望Length成为一个与Book有关的独立模型。 我认为拥有长度模型毫无意义。 使用'length'作为Book属性。