控制器动作中的未定义方法new

Cyz*_*far 3 ruby ruby-on-rails twilio

我收到一条奇怪的错误信息,没有给出太多信息,我很困惑.

undefined method ` ' for #<User::PhoneNumbersController:0x007ff2259fa320>
Run Code Online (Sandbox Code Playgroud)

router.rb

namespace :user do

    resources :phone_numbers, only: [:new, :create]
end
Run Code Online (Sandbox Code Playgroud)

控制器/用户/ phone_numbers_controller.rb

class User::PhoneNumbersController < User::UserController

  def new
    @phonenumber = PhoneNumber.new
  end

end
Run Code Online (Sandbox Code Playgroud)

车型/ phone_number.rb

class PhoneNumber < ActiveRecord::Base
  belongs_to :user
end
Run Code Online (Sandbox Code Playgroud)

它在这条线上失败了: @phonenumber = PhoneNumber.new

我的设计模式错了吗?堆栈跟踪不多说......

感谢Max的回答

我确实"成了邪恶的非破坏性空间角色的受害者"或NBSP.我在实例变量的左边有一个@phonenumber.

max*_*max 9

你已经成为邪恶的不间断空间角色或其表兄弟之一(如发空间)的受害者.

虽然明显相同,但Ruby解析器不会将非破坏空格字符U+00A0视为与普通U+0020字符相同.Ruby反而将其视为标识符.这就是你得到的原因undefined method ` '.

打开编辑器中的隐藏字符,然后去寻找那些讨厌的NBSP.

  • 这使我几乎疯狂.我想出了如何在命令行搜索它们:`grep -r -I -n"$(printf'\ 302\240')".` (4认同)
  • 好短语(*你已成为邪恶的受害者*)BTW! (2认同)
  • 顺便说一下,在文本编辑器中查看键盘快捷键.我有一个(Geany)在一些关键组合中插入不间断的空间,我偶尔会遇到这种情况.我把它关掉了,从那时起就没有任何问题了. (2认同)