我正在浏览Rails中的一些基本指南,回顾基础知识 等即将到来的考试。其中一个指南包括 在guide.rubyonrails.org上的标准入门指南。 如果需要,可以使用以下链接。我的所有代码都是针对我的应用程序的 从那里开始,所以我发布任何代码都没有问题 应该与那里显示的相同。我没有复制粘贴,但我 基本上是在屏幕的一半和网络上用Vim打字 在另一半的页面,键入我看到的内容。
http://guides.rubyonrails.org/getting_started.html
就像我说的那样,当我注意到过去时,我会沿着指南走 在教程中的某一点,我总是得到一个错误 现场。要查找代码部分,只需按页面上的Ctrl + f(或 无论你有什么搜索/找到设置为)并输入“accepts_”。这个 应立即引导您进入这一段代码。
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万一你想知道。然而, 即使在我在指南中提到的所有其他代码之后,也希望如此 我只是错过了一些代码,这些代码将在稍后出现 指南。但每次都没有,同样的错误。这就是我得到的。
PostsController #index 中的NoMethodError
undefined方法`accepts_nested_attributes_for'代表#&lt; Class:0xb7109f98&gt;
/usr/lib/ruby/gems/1.8/gems/activerecord-2.2.2/lib/active_record/base.rb:1833:in `method_missing的” 应用程序/模型/ post.rb:7 app / controllers / posts_controller.rb:9:在`index'
请求
参数:
无
响应
页眉:
{ “内容类型”=&gt; “中”, “曲奇”=&GT; [], “缓存控制”=&gt; “中无缓存”}
现在,我从指南中复制了上述代码。这两个代码部分我 在错误消息中提到的我将在下面粘贴。
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 --version 2.2.2',因为它们是windows机器,它们带有ruby安装程序附带的所有普通Windows红宝石宝石。但是,我正在使用我的Debian虚拟机运行它,但是试图将它设置为类似,我认为windows ruby gems不会改变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)
答案 0 :(得分:3)
如果您查看http://apidock.com/rails/ActiveRecord/NestedAttributes/ClassMethods/accepts_nested_attributes_for,您会看到accepted_nested_attributes_for仅在Rails 2.3.2之后存在,所以如果您的2.2版本运行,我担心您将无法使用该功能。
答案 1 :(得分:1)
您必须升级到2.3.2或更高,因为Antonio建议。我建议使用2.3.5。您可以升级系统上的gem,也可以将Rails冻结到您的应用程序。
升级宝石
gem install rails -v=2.3.5
冻结Rails
cd /your/app/
git clone git://github.com/rails/rails vendor/rails
cd vendor/rails
git checkout v2.3.5