undefined局部变量或方法`user_params'trail 4

use*_*289 5 ruby-on-rails ruby-on-rails-4

所以我按照"从头开始验证"的轨道进行了操作 - http://railscasts.com/episodes/250-authentication-from-scratch

我知道rails 4不使用attr_accessible.我在我的用户控制器中将user_params定义为私有方法.出于某种原因,rails给了我一个用户参数的未定义错误.我正在开发另一个rails应用程序,我检查了它中的post控制器.除了工作之外,它完全一样.知道这里的问题是什么吗?

users_controller.rb

class UsersController < ApplicationController
  def new
    @user = User.new
  end

  def create
    @user = User.create(user_params)
  if @user.save
   redirect_to root_url, :notice => "Signed up!"
 else
   render "new"
   end
private

def user_params
  params.require(:user).permit(:email, :password, :password_confirmation)
 end    
Run Code Online (Sandbox Code Playgroud)

错误消息:未定义的局部变量或方法`user_params'for#

完整堆栈跟踪:

app/controllers/create' actionpack (4.1.1) lib/action_controller/metal/implicit_render.rb:4:inusers_controller.rb :7:在send_action'actionpack(4.1.1)lib/abstract_controller/base.rb:189:in process_action' actionpack (4.1.1) lib/action_controller/metal/rendering.rb:10:inprocess_action'actionpack(4.1.1)lib/abstract_controller/callbacks.rb:20:in block in process_action' activesupport (4.1.1) lib/active_support/callbacks.rb:113:incall 'activesupport(4.1.1)lib/active_support/callbacks.rb:113:在call' activesupport (4.1.1) lib/active_support/callbacks.rb:229:in块中停止'activesupport(4.1.1)lib/active_support/callbacks.rb:229:在call' activesupport (4.1.1) lib/active_support/callbacks.rb:229:in块中停止'activesupport(4.1.1)lib /active_support/callbacks.rb:166:in call' activesupport (4.1.1) lib/active_support/callbacks.rb:166:in 阻止'activesupport(4.1.1)lib/active_support/callbacks.rb:166:在call' activesupport (4.1.1) lib/active_support/callbacks.rb:166:in块中停止'activesupport(4.1.1)lib/active_support/callbacks.rb:166 :在call' activesupport (4.1.1) lib/active_support/callbacks.rb:166:in块中停止'activesupport(4.1.1)lib/active_support/callbacks.rb:86:在 call' activesupport (4.1.1) lib/active_support/callbacks.rb:86:in run_callbacks'actionpack(4.1.1)中lib/abstract_controller/callbacks.rb:19:在process_action' actionpack (4.1.1) lib/action_controller/metal/rescue.rb:29:inprocess_action'actionpack(4.1.1)中lib/action_controller/metal/instrumentation.rb:31:在block in process_action' activesupport (4.1.1) lib/active_support/notifications.rb:159:in仪器'activesupport(4.1.1)中的块中lib/active_support/notifications/instrumenter.rb:20:在instrument' activesupport (4.1.1) lib/active_support/notifications.rb:159:in 仪器'actionpack(4.1.1)中lib/action_controller/metal/instrumentation.rb:30:在process_action' actionpack (4.1.1) lib/action_controller/metal/params_wrapper.rb:250:inpr ocess_action'activerecord(4.1.1)lib/active_record/railties/controller_runtime.rb:18:in process_action' actionpack (4.1.1) lib/abstract_controller/base.rb:136:inprocess'actionview(4.1.1)lib/action_view/rendering.rb:30:in process' actionpack (4.1.1) lib/action_controller/metal.rb:195:indispatch'actionpack(4.1.1)lib/action_controller/metal/rack_delegation.rb:13:in dispatch' actionpack (4.1.1) lib/action_controller/metal.rb:231:inblock in action'actionpack(4.1.1)lib/action_dispatch/routing/route_set.rb:80:in call' actionpack (4.1.1) lib/action_dispatch/routing/route_set.rb:80:indispatch'actionpack(4.1.1)lib/action_dispatch/routing/route_set. rb:48:在 call' actionpack (4.1.1) lib/action_dispatch/journey/router.rb:71:in 调用块'actionpack(4.1.1)lib/action_dispatch/journey/router.rb:59:在each' actionpack (4.1.1) lib/action_dispatch/journey/router.rb:59:in调用'actionpack(4.1.1)lib/action_dispatch/routing/route_set.rb:676:在call' rack (1.5.2) lib/rack/etag.rb:23:in调用中'rack(1.5.2)lib/rack/conditionalget.rb:35:在call' rack (1.5.2) lib/rack/head.rb:11:in调用'actionpack(4.1.1)lib/action_dispatch/middleware/params_parser.rb:27:在call' actionpack (4.1.1) lib/action_dispatch/middleware/flash.rb:254:in 调用'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调用'actionpack(4.1.1)lib/action_dispatch/middleware/cookies.rb:560:在call' activerecord (4.1.1) lib/active_record/query_cache.rb:36:in调用'activerecord(4.1.1)lib/active_record/connection_adapters/abstract/connection_pool .rb:621:在 call' activerecord (4.1.1) lib/active_record/migration.rb:380:in 调用'actionpack(4.1.1)lib/action_dispatch/middleware/callbacks.rb:29:在block in call' activesupport (4.1.1) lib/active_support/callbacks.rb:82:in run_callbacks'ac中 tionpack(4.1.1)lib/action_dispatch/middleware/callbacks.rb:27:在call' actionpack (4.1.1) lib/action_dispatch/middleware/reloader.rb:73:in调用'actionpack(4.1.1)lib/action_dispatch/middleware/remote_ip.rb:76:在 call' actionpack (4.1.1) lib/action_dispatch/middleware/debug_exceptions.rb:17:in调用'actionpack(4.1.1)lib /中action_dispatch/middleware/show_exceptions.rb:30:在call' railties (4.1.1) lib/rails/rack/logger.rb:38:incall_app'railties(4.1.1)lib/rails/rack/logger.rb:20:block in call' activesupport (4.1.1) lib/active_support/tagged_logging.rb:68:in在标记为'activesupport(4.1.1)lib/active_support/tagged_logging.rb的块中: 26:在 tagged' activesupport (4.1.1) lib/active_support/tagged_logging.rb:68:in标记的'railties(4.1.1)lib/rails/rack/logger.rb:20:在call' actionpack (4.1.1) lib/action_dispatch/middleware/request_id.rb:21:in呼叫'机架(1.5.2)lib/rack/methodoverride.rb:21:在call' rack (1.5.2) lib/rack/runtime.rb:17:in呼叫'activesupport(4.1.1) )lib/active_support/cache/strategy/local_cache_middleware.rb:26:在 call' rack (1.5.2) lib/rack/lock.rb:17:in调用'actionpack(4.1.1)lib/action_dispatch/middleware/static.rb:64:在call' rack (1.5.2) lib/rack/sendfile.rb:112:in调用'railties(4.1.1)lib/rails/engine .rb:514:在call' railties (4.1.1) lib/rails/application.rb:144:in电话'机架(1.5.2)lib/rack/lock.rb:17:在call' rack (1.5.2) lib/rack/content_length.rb:14:in电话'机架(1.5.2)lib/rack/handler/webrick.rb:60:在service' /home/rick/.rvm/rubies/ruby-2.1.1/lib/ruby/2.1.0/webrick/httpserver.rb:138:in 服务'/ home /rick/.rvm/rubies/ruby-2.1.1/lib/ruby/2.1.0/webrick/httpserver.rb:94:in start_thread中的 run' /home/rick/.rvm/rubies/ruby-2.1.1/lib/ruby/2.1.0/webrick/server.rb:295:in 块'

Chr*_*det 12

数数你end的.你的代码应该是这样的:

class UsersController < ApplicationController
  def new
    @user = User.new
  end

  def create
    @user = User.create(user_params)
    if @user.save
      redirect_to root_url, :notice => "Signed up!"
    else
      render "new"
    end
  end

  private

  def user_params
    params.require(:user).permit(:email, :password, :password_confirmation)
  end
end
Run Code Online (Sandbox Code Playgroud)

  • 我以为我是如何通过一个完全无关的bug到达这里的,这真是令人惊讶,您的回答也很清楚。 (2认同)