注册时出现未定义的方法错误

Posted

技术标签:

【中文标题】注册时出现未定义的方法错误【英文标题】:Undefined method error on signup 【发布时间】:2014-09-18 13:47:16 【问题描述】:

我有一个包含不同列的“用户”表。其中一列是用户名。我决定通过迁移删除该列。这样做之后,我尝试通过注册表单(创建操作)创建一个新用户,但我收到用户名的未定义方法错误,我不知道为什么。在@user.save 上抛出错误。

这里是相关代码,首先是用户控制器的操作,然后是实际提交的表单。

def user_params
  params.require(:user).permit(:name, :email, :password, :password_confirmation)
end

def create
  @user = User.new(user_params)
  if @user.save
    session[:user_id] = @user.id
    redirect_to @user, notice: 'Thank you for registering!'
  else
    render :new 
  end
end

<%= form_for(@user) do |f| %>
  <%= render "shared/errors", object: @user %>
  <fieldset>
    <ol>
      <li class="required">
        <%= f.label :name %>
        <%= f.text_field :name, size: 40, autofocus: true %>
      </li>
      <li class="required">
        <%= f.label :email %>
        <%= f.email_field :email, size: 40 %>
      </li>
      <li class="required">
        <%= f.label :password %>
        <%= f.password_field :password, size: 40 %>
      </li>
      <li class="required">
        <%= f.label :password_confirmation, "Confirm Password" %>
        <%= f.password_field :password_confirmation, size: 40 %>
      </li>
    </ol>
    <p>
      <% if @user.new_record? %>
        <%= f.submit "Create Account" %>
      <% else %>
        <%= f.submit "Update Account" %>
      <% end %>
    </p>
  </fieldset>
<% end %>

有什么想法吗?堆栈跟踪,根据要求:

activemodel (4.0.5) lib/active_model/attribute_methods.rb:439:in method_missing' activerecord (4.0.5) lib/active_record/attribute_methods.rb:167:inmethod_missing' activemodel (4.0.5) lib/active_model/validator.rb:151:in block in validate' activemodel (4.0.5) lib/active_model/validator.rb:150:ineach' activemodel (4.0.5) lib/active_model/validator.rb:150:in validate' activerecord (4.0.5) lib/active_record/validations/presence.rb:5:invalidate' activesupport (4.0.5) lib/active_support/callbacks.rb:283:in _callback_before_609' activesupport (4.0.5) lib/active_support/callbacks.rb:447:in_run__3888567514204995588__validate__callbacks' activesupport (4.0.5) lib/active_support/callbacks.rb:80:in run_callbacks' activemodel (4.0.5) lib/active_model/validations.rb:373:inrun_validations!' activemodel (4.0.5) lib/active_model/validations/callbacks.rb:106:in block in run_validations!' activesupport (4.0.5) lib/active_support/callbacks.rb:373:in_run__3888567514204995588__validation__callbacks' activesupport (4.0.5) lib/active_support/callbacks.rb:80:in run_callbacks' activemodel (4.0.5) lib/active_model/validations/callbacks.rb:106:inrun_validations! activemodel (4.0.5) lib/active_model/validations.rb:314:in valid?' activerecord (4.0.5) lib/active_record/validations.rb:70:invalid?' activerecord (4.0.5) lib/active_record/validations.rb:77:in perform_validations' activerecord (4.0.5) lib/active_record/validations.rb:51:insave' activerecord (4.0.5) lib/active_record/attribute_methods/dirty.rb:32:in save' activerecord (4.0.5) lib/active_record/transactions.rb:270:inblock (2 levels) in save' activerecord (4.0.5) lib/active_record/transactions.rb:330:in block in with_transaction_returning_status' activerecord (4.0.5) lib/active_record/connection_adapters/abstract/database_statements.rb:213:inblock in transaction' activerecord (4.0.5) lib/active_record/connection_adapters/abstract/database_statements.rb:221:in within_new_transaction' activerecord (4.0.5) lib/active_record/connection_adapters/abstract/database_statements.rb:213:intransaction' activerecord (4.0.5) lib/active_record/transactions.rb:209:in transaction' activerecord (4.0.5) lib/active_record/transactions.rb:327:inwith_transaction_returning_status' activerecord (4.0.5) lib/active_record/transactions.rb:270:in block in save' activerecord (4.0.5) lib/active_record/transactions.rb:285:inrollback_active_record_state!' activerecord (4.0.5) lib/active_record/transactions.rb:269:in save' app/controllers/users_controller.rb:17:increate' actionpack (4.0.5) lib/action_controller/metal/implicit_render.rb:4:in send_action' actionpack (4.0.5) lib/abstract_controller/base.rb:189:inprocess_action' actionpack (4.0.5) lib/action_controller/metal/rendering.rb:10:in process_action' actionpack (4.0.5) lib/abstract_controller/callbacks.rb:18:inblock in process_action' activesupport (4.0.5) lib/active_support/callbacks.rb:403:in _run__2040789553997201778__process_action__callbacks' activesupport (4.0.5) lib/active_support/callbacks.rb:80:inrun_callbacks' actionpack (4.0.5) lib/abstract_controller/callbacks.rb:17:in process_action' actionpack (4.0.5) lib/action_controller/metal/rescue.rb:29:inprocess_action' actionpack (4.0.5) lib/action_controller/metal/instrumentation.rb:31:in block in process_action' activesupport (4.0.5) lib/active_support/notifications.rb:159:inblock in instrument' activesupport (4.0.5) lib/active_support/notifications/instrumenter.rb:20:in instrument' activesupport (4.0.5) lib/active_support/notifications.rb:159:ininstrument' actionpack (4.0.5) lib/action_controller/metal/instrumentation.rb:30:in process_action' actionpack (4.0.5) lib/action_controller/metal/params_wrapper.rb:250:inprocess_action' activerecord (4.0.5) lib/active_record/railties/controller_runtime.rb:18:in process_action' actionpack (4.0.5) lib/abstract_controller/base.rb:136:inprocess' actionpack (4.0.5) lib/abstract_controller/rendering.rb:44:in process' actionpack (4.0.5) lib/action_controller/metal.rb:195:indispatch' actionpack (4.0.5) lib/action_controller/metal/rack_delegation.rb:13:in dispatch' actionpack (4.0.5) lib/action_controller/metal.rb:231:inblock in action' actionpack (4.0.5) lib/action_dispatch/routing/route_set.rb:80:in call' actionpack (4.0.5) lib/action_dispatch/routing/route_set.rb:80:indispatch' actionpack (4.0.5) lib/action_dispatch/routing/route_set.rb:48:in call' actionpack (4.0.5) lib/action_dispatch/journey/router.rb:71:inblock in call' actionpack (4.0.5) lib/action_dispatch/journey/router.rb:59:in each' actionpack (4.0.5) lib/action_dispatch/journey/router.rb:59:incall' actionpack (4.0.5) lib/action_dispatch/routing/route_set.rb:674:in call' rack (1.5.2) lib/rack/etag.rb:23:incall' 机架 (1.5.2) lib/rack/conditionalget.rb:35:in call' rack (1.5.2) lib/rack/head.rb:11:incall' actionpack (4.0.5) lib/action_dispatch/middleware/params_parser.rb:27:in call' actionpack (4.0.5) lib/action_dispatch/middleware/flash.rb:241:incall' 机架 (1.5.2) lib/rack/session/abstract/id.rb:225:in context' rack (1.5.2) lib/rack/session/abstract/id.rb:220:incall' actionpack (4.0.5) lib/action_dispatch/middleware/cookies.rb:486:in call' activerecord (4.0.5) lib/active_record/query_cache.rb:36:incall' activerecord (4.0.5) lib/active_record/connection_adapters/abstract/connection_pool.rb:626:in call' activerecord (4.0.5) lib/active_record/migration.rb:373:incall' actionpack (4.0.5) lib/action_dispatch/middleware/callbacks.rb:29:in block in call' activesupport (4.0.5) lib/active_support/callbacks.rb:373:in_run__1209442307347215813__call__callbacks' activesupport (4.0.5) lib/active_support/callbacks.rb:80:in run_callbacks' actionpack (4.0.5) lib/action_dispatch/middleware/callbacks.rb:27:incall' actionpack (4.0.5) lib/action_dispatch/middleware/reloader.rb:64:in call' actionpack (4.0.5) lib/action_dispatch/middleware/remote_ip.rb:76:incall' actionpack (4.0.5) lib/action_dispatch/middleware/debug_exceptions.rb:17:in call' actionpack (4.0.5) lib/action_dispatch/middleware/show_exceptions.rb:30:incall' railties (4.0.5) lib/rails/rack/logger.rb:38:in call_app' railties (4.0.5) lib/rails/rack/logger.rb:20:inblock in call' activesupport (4.0.5) lib/active_support/tagged_logging.rb:68:in block in tagged' activesupport (4.0.5) lib/active_support/tagged_logging.rb:26:intagged' activesupport (4.0.5) lib/active_support/tagged_logging.rb:68:in tagged' railties (4.0.5) lib/rails/rack/logger.rb:20:incall' actionpack (4.0.5) lib/action_dispatch/middleware/request_id.rb:21:in call' rack (1.5.2) lib/rack/methodoverride.rb:21:incall' 机架 (1.5.2) lib/rack/runtime.rb:17:in call' activesupport (4.0.5) lib/active_support/cache/strategy/local_cache.rb:83:incall' 机架 (1.5.2) lib/rack/lock.rb:17:in call' actionpack (4.0.5) lib/action_dispatch/middleware/static.rb:64:incall' 机架 (1.5.2) lib/rack/sendfile.rb:112:in call' railties (4.0.5) lib/rails/engine.rb:511:incall' railties (4.0.5) lib/rails/application.rb:97:in call' rack (1.5.2) lib/rack/lock.rb:17:incall' 机架 (1.5.2) lib/rack/content_length.rb:14:in call' rack (1.5.2) lib/rack/handler/webrick.rb:60:inservice'

【问题讨论】:

发布堆栈跟踪,它会告诉你错误发生在哪里。 在上面的帖子中编辑了堆栈跟踪。 整个堆栈跟踪,而不仅仅是其中的一行。信息就在某处。 【参考方案1】:

阅读堆栈跟踪,它会告诉你出了什么问题。看看你的User 班级。也许你有类似的东西:

validates_presence_of :username

validates :username, presence: true

【讨论】:

这是我第一次看它。感谢您指出它的用处。我看到它抛出了一堆验证通知,所以我明白为什么检查模型将是下一个合乎逻辑的步骤。低看,模型中隐藏了一些东西。谢谢。 没问题。堆栈跟踪是在某些东西引发异常时生成的。它可能不是第一行,作为异常的“来源”,但它应该在某处。有时候,把信息弄出来有点像游戏。

以上是关于注册时出现未定义的方法错误的主要内容,如果未能解决你的问题,请参考以下文章

在ruby中编译时出现未定义的方法错误

多重通知:调用函数时出现未定义的变量错误[重复]

尝试在 SharePoint 环境中使用 AngularJS DateRangePicker 时出现未定义错误

将材质应用于 gltf 对象时出现未定义错误

在 Xcode 4 下构建 PhoneGap 时出现未定义符号错误?

在 ImageJ 中运行宏时出现未定义的变量错误