0

モデルの 1 つで 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

ヒントやヒントをいただければ幸いです。

4

1 に答える 1

0

これは混乱です。「長さ」を Book の属性にしたい場合、Length を Book と関係のある別のモデルにしたい場合。長さモデルを使用しても意味がありません。Book プロパティとして「長さ」を使用します。

于 2013-03-28T11:14:16.467 に答える