2013-09-21 52 views
0

我是Ruby on Rails中的新手。我正在按照这里的教程Getting Started Ruby on Rails学习本教程时出现NoMethodError

通过创建帖子的一半方法,我偶然发现了一个错误,这是在我的控制器中的PostsController#create中的NoMethodError。我现在很困惑。

下面是我从教程中学到的代码。我在这里犯了一个愚蠢的错误吗?

posts_controller.rb

class PostsController < ApplicationController 

    def new 

    end 

    def create 
    @post = Post.new(post_params) 

    @post.save 
    redirect_to @post 
    end 

    def show 
    @post = Post.find(params[:id]) 
    end 

    private 
    def post_params 
    params.require(:post).permit(:title, :text) 
    end 

end 

我的职位/ new.html.erb

<%= form_for :post, url: posts_path do |f| %> 
    <p> 
     <%= f.label :title %><br> 
     <%= f.text_field :title %> 
    </p> 

    <p> 
     <%= f.label :text %><br> 
     <%= f.text_area :text %> 
    </p> 

    <p> 
     <%= f.submit %> 
    </p> 
<% end %> 

的routes.rb

Blog::Application.routes.draw do 

    resource :posts 
    root to: "welcome#index" 

end 

型号/ post.rb

class Post < ActiveRecord::Base 
end 

和堆栈跟踪

actionpack (4.0.0) lib/action_dispatch/routing/polymorphic_routes.rb:129:in `polymorphic_url' 
actionpack (4.0.0) lib/action_dispatch/routing/url_for.rb:159:in `url_for' 
actionpack (4.0.0) lib/action_controller/metal/redirecting.rb:100:in `_compute_redirect_to_location' 
turbolinks (1.3.0) lib/turbolinks.rb:15:in `_compute_redirect_to_location_with_xhr_referer' 
actionpack (4.0.0) lib/action_controller/metal/redirecting.rb:70:in `redirect_to' 
actionpack (4.0.0) lib/action_controller/metal/flash.rb:40:in `redirect_to' 
actionpack (4.0.0) lib/action_controller/metal/instrumentation.rb:61:in `block in redirect_to' 
activesupport (4.0.0) lib/active_support/notifications.rb:159:in `block in instrument' 
activesupport (4.0.0) lib/active_support/notifications/instrumenter.rb:20:in `instrument' 
activesupport (4.0.0) lib/active_support/notifications.rb:159:in `instrument' 
actionpack (4.0.0) lib/action_controller/metal/instrumentation.rb:60:in `redirect_to' 
app/controllers/posts_controller.rb:11:in `create' 
actionpack (4.0.0) lib/action_controller/metal/implicit_render.rb:4:in `send_action' 
actionpack (4.0.0) lib/abstract_controller/base.rb:189:in `process_action' 
actionpack (4.0.0) lib/action_controller/metal/rendering.rb:10:in `process_action' 
actionpack (4.0.0) lib/abstract_controller/callbacks.rb:18:in `block in process_action' 
activesupport (4.0.0) lib/active_support/callbacks.rb:403:in `_run__506468238__process_action__callbacks' 
activesupport (4.0.0) lib/active_support/callbacks.rb:80:in `run_callbacks' 
actionpack (4.0.0) lib/abstract_controller/callbacks.rb:17:in `process_action' 
actionpack (4.0.0) lib/action_controller/metal/rescue.rb:29:in `process_action' 
actionpack (4.0.0) lib/action_controller/metal/instrumentation.rb:31:in `block in process_action' 
activesupport (4.0.0) lib/active_support/notifications.rb:159:in `block in instrument' 
activesupport (4.0.0) lib/active_support/notifications/instrumenter.rb:20:in `instrument' 
activesupport (4.0.0) lib/active_support/notifications.rb:159:in `instrument' 
actionpack (4.0.0) lib/action_controller/metal/instrumentation.rb:30:in `process_action' 
actionpack (4.0.0) lib/action_controller/metal/params_wrapper.rb:245:in `process_action' 
activerecord (4.0.0) lib/active_record/railties/controller_runtime.rb:18:in `process_action' 
actionpack (4.0.0) lib/abstract_controller/base.rb:136:in `process' 
actionpack (4.0.0) lib/abstract_controller/rendering.rb:44:in `process' 
actionpack (4.0.0) lib/action_controller/metal.rb:195:in `dispatch' 
actionpack (4.0.0) lib/action_controller/metal/rack_delegation.rb:13:in `dispatch' 
actionpack (4.0.0) lib/action_controller/metal.rb:231:in `block in action' 
actionpack (4.0.0) lib/action_dispatch/routing/route_set.rb:80:in `call' 
actionpack (4.0.0) lib/action_dispatch/routing/route_set.rb:80:in `dispatch' 
actionpack (4.0.0) lib/action_dispatch/routing/route_set.rb:48:in `call' 
actionpack (4.0.0) lib/action_dispatch/journey/router.rb:71:in `block in call' 
actionpack (4.0.0) lib/action_dispatch/journey/router.rb:59:in `each' 
actionpack (4.0.0) lib/action_dispatch/journey/router.rb:59:in `call' 
actionpack (4.0.0) lib/action_dispatch/routing/route_set.rb:655:in `call' 
rack (1.5.2) lib/rack/etag.rb:23:in `call' 
rack (1.5.2) lib/rack/conditionalget.rb:35:in `call' 
rack (1.5.2) lib/rack/head.rb:11:in `call' 
actionpack (4.0.0) lib/action_dispatch/middleware/params_parser.rb:27:in `call' 
actionpack (4.0.0) lib/action_dispatch/middleware/flash.rb:241:in `call' 
rack (1.5.2) lib/rack/session/abstract/id.rb:225:in `context' 
rack (1.5.2) lib/rack/session/abstract/id.rb:220:in `call' 
actionpack (4.0.0) lib/action_dispatch/middleware/cookies.rb:486:in `call' 
activerecord (4.0.0) lib/active_record/query_cache.rb:36:in `call' 
activerecord (4.0.0) lib/active_record/connection_adapters/abstract/connection_pool.rb:626:in `call' 
activerecord (4.0.0) lib/active_record/migration.rb:369:in `call' 
actionpack (4.0.0) lib/action_dispatch/middleware/callbacks.rb:29:in `block in call' 
activesupport (4.0.0) lib/active_support/callbacks.rb:373:in `_run__153816630__call__callbacks' 
activesupport (4.0.0) lib/active_support/callbacks.rb:80:in `run_callbacks' 
actionpack (4.0.0) lib/action_dispatch/middleware/callbacks.rb:27:in `call' 
actionpack (4.0.0) lib/action_dispatch/middleware/reloader.rb:64:in `call' 
actionpack (4.0.0) lib/action_dispatch/middleware/remote_ip.rb:76:in `call' 
actionpack (4.0.0) lib/action_dispatch/middleware/debug_exceptions.rb:17:in `call' 
actionpack (4.0.0) lib/action_dispatch/middleware/show_exceptions.rb:30:in `call' 
railties (4.0.0) lib/rails/rack/logger.rb:38:in `call_app' 
railties (4.0.0) lib/rails/rack/logger.rb:21:in `block in call' 
activesupport (4.0.0) lib/active_support/tagged_logging.rb:67:in `block in tagged' 
activesupport (4.0.0) lib/active_support/tagged_logging.rb:25:in `tagged' 
activesupport (4.0.0) lib/active_support/tagged_logging.rb:67:in `tagged' 
railties (4.0.0) lib/rails/rack/logger.rb:21:in `call' 
actionpack (4.0.0) lib/action_dispatch/middleware/request_id.rb:21:in `call' 
rack (1.5.2) lib/rack/methodoverride.rb:21:in `call' 
rack (1.5.2) lib/rack/runtime.rb:17:in `call' 
activesupport (4.0.0) lib/active_support/cache/strategy/local_cache.rb:83:in `call' 
rack (1.5.2) lib/rack/lock.rb:17:in `call' 
actionpack (4.0.0) lib/action_dispatch/middleware/static.rb:64:in `call' 
railties (4.0.0) lib/rails/engine.rb:511:in `call' 
railties (4.0.0) lib/rails/application.rb:97:in `call' 
rack (1.5.2) lib/rack/lock.rb:17:in `call' 
rack (1.5.2) lib/rack/content_length.rb:14:in `call' 
rack (1.5.2) lib/rack/handler/webrick.rb:60:in `service' 
C:/RailsInstaller/Ruby2.0.0/lib/ruby/2.0.0/webrick/httpserver.rb:138:in `service' 
C:/RailsInstaller/Ruby2.0.0/lib/ruby/2.0.0/webrick/httpserver.rb:94:in `run' 
C:/RailsInstaller/Ruby2.0.0/lib/ruby/2.0.0/webrick/server.rb:295:in `block in start_thread' 
+1

您可以粘贴错误消息和堆栈跟踪。我在表面上看不到任何东西,但堆栈轨迹在红宝石中非常有用。另外,你是否已经定义了“Post”模型?如果是这样,请粘贴。 – pdobb

+0

我在我的问题上添加完整的跟踪。随时查看@pdobb并感谢您 –

回答

1

我想你要定义

resources :posts

,而不是一个单一的资源在routes.rb文件。如果我没有弄错redirect_to实际上是在尝试做post_path(id)哪些不存在。

+0

这是我无法理解流程的地方。我知道重定向会回到帖子,但通过教程的一半,我得到旁边的教程另一个未明确的错误。我不知道现在做什么.... –

0

有时是很有帮助的我看别人的代码,像许多已经发布在GitHub上。无论如何,所有的铁轨库都在那里。为什么不看一看。也许是Michael Hartl书的教程代码。 https://github.com/mhartl/sample_app_3rd_edition 只是这样的事情帮助我。除此之外,github上还有很多其他的完整rails应用程序。如果你还没有帐户,那么你应该有一个存储你的教程应用程序,我们可以看看它,就像它是一个代码粘贴。

我相信这一个是Rails的指南博客应用,据我已经得到了虽然我没有用,现在工作了一段时间。 https://github.com/DouglasAllen/Rails-projects/blob/master/rails_docs/blog/config/routes.rb

这是对Rails和Ruby的一些错误的东西。你(我)并不总是知道它是从哪里来的。有时你只需要尝试不同的东西。不要放弃。保存你的代码并阅读一些其他文章。一个是官方的很好,但这不是最后一句话。数以百万计的其他用户也在努力为他们工作。 至少你有日志启用不是吗?我希望这是你在这里发布错误信息的地方。如果没有,去找出如何使用它。然后发布它与您保存的应用程序。

另一个获得一些学习和代码的好地方是Heroku开发中心。如https://devcenter.heroku.com/articles/getting-started-with-rails4

玩得开心!

你可以玩的东西,但有点不安全的是环境变量。

试试这条路线。RB

root 'application#env_vars' 

而这application_controller.rb

def env_vars 
    vars = request.env.each 
    render plain: "env #{vars.each {|v| v}}" 
end 

几乎一样糟糕,追逐那些堆栈跟踪。

如果你曾经玩过Sinatra,那么你会发现Rails路线 非常相似,因为这是Rack的用途。

get '/vars' => 'application#env_vars' 

只是一个HTTP GET请求。 [URL]:[port]/map to controller-name#方法或动作,因为他们称之为。 资源包含的不仅仅是控制器,还包括模型。 MVC是Rails的方式。它可让您通过发生器一次创建所有零件。但现在这些列车真的使用交流发电机。 ;-)