2013-09-21 3 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

나는 당신이 당신의 routes.rb 파일 대신 단일 자원의

resources :posts

을 정의하려는 생각합니다. 내가 실수하지 않는다면 redirect_to은 실제로 존재하지 않는 post_path(id)을하려고합니다.

+0

이것은 내가 흐름을 이해하지 못한 곳입니다. 나는 리다이렉트가 포스트로 되돌아 갈 것을 알았지 만, 튜토리얼의 절반 정도는 튜토리얼 옆에 또 다른 불특정 에러가있다. 나도 몰라. 지금 .... –

0

때때로 많은 사람들이 github에 게시 한 것처럼 다른 사람의 코드를 살펴 보는 것이 도움이됩니다. 레일을위한 모든 도서관은 어쨌든 거기에 있습니다. 왜 보지 않으시겠습니까? 아마 Michael Hartl 책에 대한 튜토리얼 코드 일 것입니다. https://github.com/mhartl/sample_app_3rd_edition 그런 것들이 저에게 도움이됩니다. 이 외에도 github에는 다른 많은 풀 레일 앱이 있습니다. 아직 계정이 없다면 튜토리얼 앱을 저장해야하며 코드 붙여 넣기와 같이 살펴볼 수 있습니다.

나는 이것이 지금까지 잠시 동안 작업하지는 않았지만 내가 얻은 것만 큼 레일즈 가이드 블로그 앱이라고 믿는다. https://github.com/DouglasAllen/Rails-projects/blob/master/rails_docs/blog/config/routes.rb

레일즈와 루비 오류에 관한 것입니다. 당신은 (나는) 항상 그것이 어디에서 오는 것인지 확신하지 못합니다. 때때로 당신은 다른 것들을 시도해야합니다. 포기하지 마라. 코드를 저장하고 다른 기사를 읽으십시오. 공식적인 사람은 괜찮지 만 마지막 단어는 아닙니다. 수백만 명의 다른 사용자가 거기서 일을하고 있습니다. 적어도 로깅을 사용하도록 설정 했습니까? 내가 여기에 오류에 대한 귀하의 게시물을 가지고 희망입니다. 그렇지 않은 경우 사용 방법을 찾아보십시오. 그런 다음 저장된 앱으로 게시하십시오.

학습 및 일부 코드를 얻는 또 다른 훌륭한 곳은 Heroku Dev Center입니다. 예 : https://devcenter.heroku.com/articles/getting-started-with-rails4

재미있게 보내세요!

놀 수 있지만 약간 불안한 것은 환경 변수입니다.

경로에서 사용해보세요.그 스택 추적을 쫓는로 application_controller.rb

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

거의 나쁜에서

root 'application#env_vars' 

이 경우 rb.

Sinatra를 가지고 놀았다면 레일스 루트 이 랙과 비슷한 점 때문에 매우 유사하다는 것을 알 수 있습니다.

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

은 단지 HTTP GET 요청입니다. [URL] : [port]/그들이 호출 할 때 controller-name # method 또는 action에 매핑합니다. 리소스에는 모델이 포함될뿐 아니라 컨트롤러가 포함됩니다. MVC는 Rails 방식입니다. 그것은 당신이 발전기를 통해 한 번에 모든 부품을 만들 수 있습니다. 그러나 열차는 요즘 발전기를 실제로 사용합니다. ;-)