获取 nil:NilClass 的未定义方法 '[]' 即使定义了实例变量



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

控制器如下:

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 []'for 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>

params[:phone_number][:phone_number]为null。

尝试以下视图

<div id="send-pin">
<h3>What's your phone number?</h3>
<%= form_for @phone_number, remote: true, html: {id: "first_form"} 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",'#', id: "resend_pin_code" %> 
</div>
<div id="status-box" class="alert alert-success">
<p id="status-message">Status: Haven’t done anything yet</p>
</div>

<script>
$("#resend_pin_code").click(function(){
$("#first_form").submit();
}
)
</script>

最新更新