Ruby on Rails жалуется на несуществующий метод, встроенный в Active Record.Какие? - PullRequest
0 голосов
/ 12 мая 2010

Я расскажу о некоторых основных руководствах по Rails и рассмотрю основы и такой для предстоящего экзамена. Одним из руководств был своего рода стандартное руководство по началу работы на guide.rubyonrails.org. Вот ссылка, если вам это нужно. Также весь мой код для моего приложения оттуда, так что у меня нет проблем с выпуском любого моего кода, так как он должно быть таким же, как показано там. Я не делал копировальную пасту, но я в основном печатал с Vim в одной половине моего экрана и в Интернете страницу в другой половине, набрав то, что я вижу.

http://guides.rubyonrails.org/getting_started.html

Так что, как я уже сказал, я иду вдоль гида, когда я заметил мимо определенный момент в учебнике, я всегда получал сообщение об ошибке сайт. Чтобы найти раздел кода, просто нажмите Ctrl + F на странице (или все, что у вас есть для поиска / поиска установлено) и введите "acceptpts_". это должен немедленно направить вас к этому куску кода.

class Post < ActiveRecord::Base
  validates_presence_of :name, :title
  validates_length_of :title, :minimum => 5
  has_many :comments
  has_many :tags

  accepts_nested_attributes_for :tags, :allow_destroy => :true  ,
   :reject_if => proc { |attrs| attrs.all? { |k, v| v.blank? } }
end

Итак, я попытался вставить это в мой код. Он находится в ~ / Rails / blog / app / models / post.rb на случай, если вам интересно. Тем не мение, даже после всего другого кода, который я вставил в прошлое, в руководстве, надеясь, Я просто пропустил какую-то строку кода, которая появится позже в руководство. Но ничего, одна и та же ошибка каждый раз. Это то, что я получаю.


NoMethodError в PostsController # index

неопределенный метод `accepts_nested_attributes_for 'для # <класса: 0xb7109f98>

/ USR / Lib / рубин / драгоценные камни / 1,8 / драгоценные камни / ActiveRecord-2.2.2 / Библиотека / active_record / base.rb: 1833: в `Method_missing» приложение / модели / post.rb: 7 app / controllers / posts_controller.rb: 9: в `index '

Запрос

Параметры:

нет

Ответ

Заголовки:

{ "Content-Type" => "", "Печенье" => [], "Cache-Control" => "нет кэша"}


Теперь я скопировал приведенный выше код из руководства. Два раздела кода я Отредактировано упомянуто в сообщении об ошибке, я буду вставлять, как показано ниже.


class PostsController < ApplicationController
  # GET /posts
  # GET /posts.xml

  before_filter :find_post,
    :only => [:show, :edit, :update, :destroy]

  def index
    @posts = Post.find(:all) # <= the line 9 referred to in error message

    respond_to do |format|
      format.html # index.html.erb
      format.xml  { render :xml => @posts }
    end
  end

class Post < ActiveRecord::Base
  validates_presence_of :name, :title
  validates_length_of :title, :minimum => 5
  has_many :comments
  has_many :tags

  accepts_nested_attributes_for :tags, :allow_destroy => :true  , # <= problem
    :reject_if => proc { |attrs| attrs.all? { |k, v| v.blank? } }
end

Также вот список драгоценных камней. Я отмечаю, что они немного устарели, но по умолчанию Rails устанавливает любую из школьных машин (среда, вероятнее всего, для моего экзамена) в основном «gem install rails - версия 2.2.2», и, поскольку они являются машинами Windows, они поставляются со всеми обычными Windows Ruby Gems, которые идут с установщиком Ruby. Тем не менее, я запускаю это на моей виртуальной машине Debian, но пытаюсь настроить ее аналогичным образом, и я решил, что гемы ruby ​​для Windows ничего не изменят в Rails.

*** LOCAL GEMS ***

actionmailer (2.2.2)
actionpack (2.2.2)
activerecord (2.2.2)
activeresource (2.2.2)
activesupport (2.2.2)
gem_plugin (0.2.3)
hpricot (0.8.2)
linecache (0.43)
log4r (1.1.7)
ptools (1.1.9)
rack (1.1.0)
rails (2.2.2)
rake (0.8.7)
sqlite3-ruby (1.2.3)

Ответы [ 2 ]

3 голосов
/ 12 мая 2010

Если вы посмотрите на http://apidock.com/rails/ActiveRecord/NestedAttributes/ClassMethods/accepts_nested_attributes_for, вы увидите, что accepts_nested_attributes_for существует только с Rails 2.3.2, поэтому я боюсь, что у вас не будет такой функциональности, если вы используете версию 2.2. *

1 голос
/ 13 мая 2010

Вы должны перейти на 2.3.2 или выше, как рекомендует Антонио . Я предлагаю использовать 2.3.5. Вы можете обновить гемы в системе или заморозить Rails для своего приложения.

Чтобы обновить драгоценные камни

gem install rails -v=2.3.5

чтобы заморозить рельсы

cd /your/app/
git clone git://github.com/rails/rails vendor/rails
cd vendor/rails
git checkout v2.3.5
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...