获取nil的未定义方法`[]':NilClass,即使定义了实例变量也是如此

时间:2017-05-01 11:10:28

标签: ruby-on-rails activerecord

我试图在两个不同的地方调用控制器动作。

控制器如下:

def create
      @phone_number = PhoneNumber.find_or_create_by(phone_number: params[:phone_number][:phone_number])
      @phone_number.generate_pin
      @phone_number.send_pin
      respond_to do |format|
        format.js # render app/views/phone_numbers/create.js.erb
      end
end

我想在视图中的链接上调用create

  <%=link_to "Resend Pin", phone_numbers_path, method: :post %>

我的佣金路线输出如下所示:

phone_numbers POST /phone_numbers(.:format)        phone_numbers#create
new_phone_number GET  /phone_numbers/new(.:format)    phone_numbers#new
phone_numbers_verify POST /phone_numbers/verify(.:format) phone_numbers#verify

我在PhoneNumber activerecord中有数据。当我点击“重新发送Pin”时,我收到以下错误:

NoMethodError in PhoneNumbersController#create

undefined method []'为nil:NilClass`

有人可以告诉我,我在这里缺少什么吗?

html.erb

<div id="send-pin">
  <h3>What's your phone number?</h3>
  <%= form_for @phone_number, remote: true do |f| %>
    <div class="form-group">
      <%= f.text_field :phone_number %>
    </div>
    <%= f.submit "Send PIN", class: "btn btn-primary", id: 'send-pin-link' %>
  <% end %>
</div>
<div id="verify-pin">
  <h3>Enter your PIN</h3>
  <%= form_tag phone_numbers_verify_path, remote: true do |f| %>
    <%= hidden_field_tag 'hidden_phone_number', '' %>
    <div class="form-group">
      <%= text_field_tag :pin %>
    </div>
    <%= submit_tag "Verify PIN", class: "btn btn-primary" %>
  <% end %>

  <%=link_to "Resend Pin", phone_numbers_path, method: :post  %>

</div>

1 个答案:

答案 0 :(得分:1)

Initialize为空。

在视图中尝试以下

params[:phone_number][:phone_number]