ArticlesController中的NoMethodError #create

Set*_*ton 6 ruby ruby-on-rails ruby-on-rails-3

所以我试着按照这里的教程:http://guides.rubyonrails.org/getting_started.html

我对于发生了什么有一些想法,但是在这一点上,我正变得越来越沮丧,并且无法以一种有意义的方式看待这一点.我的控制器目前在哪里.这很简单,我以为我知道发生了什么:

articles_controller.rb
class ArticlesController < ApplicationController
def new
end

def create
  @article = Article.new(article_params)

  @article.save
  redirect_to @article
end

private
  def article_params
    params.require(:article).permit(:title, :text)
  end
end
Run Code Online (Sandbox Code Playgroud)

的routes.rb

Rails.application.routes.draw do
  get 'welcome/index'
Rails.application.routes.draw do
    resource :articles
root 'welcome#index'
    end
end
Run Code Online (Sandbox Code Playgroud)

但我现在已经超出了我的深度,无法继续下去.如果它有所作为我正在运行Windows 8专业版.任何帮助,将不胜感激.我可以告诉错误与'redirect_to'有关,但除此之外我什么都不知道!我的错误现在看起来像:

NoMethodError in ArticlesController#create
undefined method `article_url' for #<ArticlesController:0x979bfc0>
Extracted source (around line #0):

app/controllers/articles_controller.rb:9:in `create'
Run Code Online (Sandbox Code Playgroud)

堆栈跟踪看起来像这样:

actionpack (4.2.0) lib/action_dispatch/routing/polymorphic_routes.rb:268:in `handle_model_call'
actionpack (4.2.0) lib/action_dispatch/routing/url_for.rb:167:in `url_for'
actionpack (4.2.0) lib/action_controller/metal/redirecting.rb:95:in `_compute_redirect_to_location'
turbolinks (2.5.3) lib/turbolinks/xhr_headers.rb:21:in `_compute_redirect_to_location'
actionpack (4.2.0) lib/action_controller/metal/redirecting.rb:75:in `redirect_to'
actionpack (4.2.0) lib/action_controller/metal/flash.rb:57:in `redirect_to'
actionpack (4.2.0) lib/action_controller/metal/instrumentation.rb:61:in `block in redirect_to'
activesupport (4.2.0) lib/active_support/notifications.rb:164:in `block in instrument'
activesupport (4.2.0) lib/active_support/notifications/instrumenter.rb:20:in `instrument'
activesupport (4.2.0) lib/active_support/notifications.rb:164:in `instrument'
actionpack (4.2.0) lib/action_controller/metal/instrumentation.rb:60:in `redirect_to'
app/controllers/articles_controller.rb:9:in `create'
actionpack (4.2.0) lib/action_controller/metal/implicit_render.rb:4:in `send_action'
actionpack (4.2.0) lib/abstract_controller/base.rb:198:in `process_action'
actionpack (4.2.0) lib/action_controller/metal/rendering.rb:10:in `process_action'
actionpack (4.2.0) lib/abstract_controller/callbacks.rb:20:in `block in process_action'
activesupport (4.2.0) lib/active_support/callbacks.rb:117:in `call'
activesupport (4.2.0) lib/active_support/callbacks.rb:117:in `call'
activesupport (4.2.0) lib/active_support/callbacks.rb:234:in `block in halting'
activesupport (4.2.0) lib/active_support/callbacks.rb:234:in `call'
activesupport (4.2.0) lib/active_support/callbacks.rb:234:in `block in halting'
activesupport (4.2.0) lib/active_support/callbacks.rb:169:in `call'
activesupport (4.2.0) lib/active_support/callbacks.rb:169:in `block in halting'
activesupport (4.2.0) lib/active_support/callbacks.rb:169:in `call'
activesupport (4.2.0) lib/active_support/callbacks.rb:169:in `block in halting'
activesupport (4.2.0) lib/active_support/callbacks.rb:234:in `call'
activesupport (4.2.0) lib/active_support/callbacks.rb:234:in `block in halting'
activesupport (4.2.0) lib/active_support/callbacks.rb:169:in `call'
activesupport (4.2.0) lib/active_support/callbacks.rb:169:in `block in halting'
activesupport (4.2.0) lib/active_support/callbacks.rb:92:in `call'
activesupport (4.2.0) lib/active_support/callbacks.rb:92:in `_run_callbacks'
activesupport (4.2.0) lib/active_support/callbacks.rb:734:in `_run_process_action_callbacks'
activesupport (4.2.0) lib/active_support/callbacks.rb:81:in `run_callbacks'
actionpack (4.2.0) lib/abstract_controller/callbacks.rb:19:in `process_action'
actionpack (4.2.0) lib/action_controller/metal/rescue.rb:29:in `process_action'
actionpack (4.2.0) lib/action_controller/metal/instrumentation.rb:31:in `block in process_action'
activesupport (4.2.0) lib/active_support/notifications.rb:164:in `block in instrument'
activesupport (4.2.0) lib/active_support/notifications/instrumenter.rb:20:in `instrument'
activesupport (4.2.0) lib/active_support/notifications.rb:164:in `instrument'
actionpack (4.2.0) lib/action_controller/metal/instrumentation.rb:30:in `process_action'
actionpack (4.2.0) lib/action_controller/metal/params_wrapper.rb:250:in `process_action'
activerecord (4.2.0) lib/active_record/railties/controller_runtime.rb:18:in `process_action'
actionpack (4.2.0) lib/abstract_controller/base.rb:137:in `process'
actionview (4.2.0) lib/action_view/rendering.rb:30:in `process'
actionpack (4.2.0) lib/action_controller/metal.rb:195:in `dispatch'
actionpack (4.2.0) lib/action_controller/metal/rack_delegation.rb:13:in `dispatch'
actionpack (4.2.0) lib/action_controller/metal.rb:236:in `block in action'
actionpack (4.2.0) lib/action_dispatch/routing/route_set.rb:73:in `call'
actionpack (4.2.0) lib/action_dispatch/routing/route_set.rb:73:in `dispatch'
actionpack (4.2.0) lib/action_dispatch/routing/route_set.rb:42:in `serve'
actionpack (4.2.0) lib/action_dispatch/journey/router.rb:43:in `block in serve'
actionpack (4.2.0) lib/action_dispatch/journey/router.rb:30:in `each'
actionpack (4.2.0) lib/action_dispatch/journey/router.rb:30:in `serve'
actionpack (4.2.0) lib/action_dispatch/routing/route_set.rb:802:in `call'
rack (1.6.0) lib/rack/etag.rb:24:in `call'
rack (1.6.0) lib/rack/conditionalget.rb:38:in `call'
rack (1.6.0) lib/rack/head.rb:13:in `call'
actionpack (4.2.0) lib/action_dispatch/middleware/params_parser.rb:27:in `call'
actionpack (4.2.0) lib/action_dispatch/middleware/flash.rb:260:in `call'
rack (1.6.0) lib/rack/session/abstract/id.rb:225:in `context'
rack (1.6.0) lib/rack/session/abstract/id.rb:220:in `call'
actionpack (4.2.0) lib/action_dispatch/middleware/cookies.rb:560:in `call'
activerecord (4.2.0) lib/active_record/query_cache.rb:36:in `call'
activerecord (4.2.0) lib/active_record/connection_adapters/abstract/connection_pool.rb:647:in `call'
activerecord (4.2.0) lib/active_record/migration.rb:378:in `call'
actionpack (4.2.0) lib/action_dispatch/middleware/callbacks.rb:29:in `block in call'
activesupport (4.2.0) lib/active_support/callbacks.rb:88:in `call'
activesupport (4.2.0) lib/active_support/callbacks.rb:88:in `_run_callbacks'
activesupport (4.2.0) lib/active_support/callbacks.rb:734:in `_run_call_callbacks'
activesupport (4.2.0) lib/active_support/callbacks.rb:81:in `run_callbacks'
actionpack (4.2.0) lib/action_dispatch/middleware/callbacks.rb:27:in `call'
actionpack (4.2.0) lib/action_dispatch/middleware/reloader.rb:73:in `call'
actionpack (4.2.0) lib/action_dispatch/middleware/remote_ip.rb:78:in `call'
web-console (2.0.0) lib/action_dispatch/debug_exceptions.rb:18:in `middleware_call'
web-console (2.0.0) lib/action_dispatch/debug_exceptions.rb:13:in `call'
actionpack (4.2.0) lib/action_dispatch/middleware/show_exceptions.rb:30:in `call'
railties (4.2.0) lib/rails/rack/logger.rb:38:in `call_app'
railties (4.2.0) lib/rails/rack/logger.rb:20:in `block in call'
activesupport (4.2.0) lib/active_support/tagged_logging.rb:68:in `block in tagged'
activesupport (4.2.0) lib/active_support/tagged_logging.rb:26:in `tagged'
activesupport (4.2.0) lib/active_support/tagged_logging.rb:68:in `tagged'
railties (4.2.0) lib/rails/rack/logger.rb:20:in `call'
actionpack (4.2.0) lib/action_dispatch/middleware/request_id.rb:21:in `call'
rack (1.6.0) lib/rack/methodoverride.rb:22:in `call'
rack (1.6.0) lib/rack/runtime.rb:18:in `call'
activesupport (4.2.0) lib/active_support/cache/strategy/local_cache_middleware.rb:28:in `call'
rack (1.6.0) lib/rack/lock.rb:17:in `call'
actionpack (4.2.0) lib/action_dispatch/middleware/static.rb:113:in `call'
Run Code Online (Sandbox Code Playgroud)

Enr*_*rai 17

基本上"未定义的方法`article_url'for"意味着rails无法为@article记录找到合适的路径.在定义路由时,rails会生成两个以_url和_path结尾的方法.您可以在应用程序中使用它们来访问相应的URL而无需对其进行硬编码.查看routes.rb文件中的代码,我发现了三件事:

  1. 您只需要一次调用Rails.application.routes.draw
  2. 为模型生成CRUD路由的关键词是"资源"(复数),而不是"资源"(单数)
  3. (不涉及错误)您的"获取'欢迎/索引'"看起来没有完成.也许你的意思是"get'/ index',以:'welcome #index'".第一个字符串指定url路径,to指定控制器#action.

尝试使用以下routes.rb:

Rails.application.routes.draw do
  resources :articles
  root 'welcome#index'
end
Run Code Online (Sandbox Code Playgroud)

我建议您在浏览时也浏览路线指南.祝好运!

  • 项目#2为+1.这是一个容易忽视的事情,但我的问题是我写了`resource`而不是复数`资源`.我的提示应该是指南说`show`的路线是`article GET /articles/:id(.:format)文章#show`包括`:id`.当我再次回顾`bin/rake routes`时,我的show route没有指定`:id` param. (2认同)

Moh*_*ady 6

啊,你看,问题是你使用的是单数词resource,而不是resources(注意s),在你的情况下你应该使用resources,因为你有多篇文章

更多关于资源资源