RoR: у вас есть нулевой объект, который вы не ожидали - PullRequest
1 голос
/ 20 июля 2011

Столкнулся с этой проблемой, Я имею, как мой взгляд

 <%= form_for(:pin, :url => {:action =>"fees"}) do |f| %>
 <%= f.text_field :pin_no %>
 <%= f.submit "Check Pin" , :class => "new_button round" %>
 <% end %>

и в моем контроллере у меня есть

def fees
@title = "Pay Fees"
pin = Pin.check_pin(params[:pin][:pin_no])
if pin.nil?
  flash.now[:error] = "Pin is not Avaliable"
  render 'fees'
else
  flash.now[:success] = "Pin Avaliable"
end
end

в моей модели у меня есть метод check_pin, определенный таким образом

def check_pin(pin_to_check)  
  pin = find_by_pin_no(pin_to_check)
   if pin.nil?
     nil
   else
     pin
    end
  end

и у меня всегда есть эта ошибка

You have a nil object when you didn't expect it!
You might have expected an instance of Array.
The error occurred while evaluating nil.[]

Что мне здесь не хватает, пожалуйста?

Ответы [ 2 ]

2 голосов
/ 20 июля 2011

Вы получаете params[:pin][:pin_no] только тогда, когда вы публикуете форму с ошибкой nil.[], поэтому добавьте request.post?, чтобы проверить ее только тогда, когда форма отправлена ​​

def fees
  @title = "Pay Fees"
  if request.post?
    pin = Pin.check_pin(params[:pin][:pin_no])
    if pin.nil?
      flash.now[:error] = "Pin is not Avaliable"
      render 'fees'
    else
      flash.now[:success] = "Pin Avaliable"
    end
  end
end
0 голосов
/ 20 июля 2011

Что делать, если вы попытаетесь немного упростить его и отказаться от метода проверки, и просто сделаете это:

def fees
  @title = "Pay Fees"
  if p = Pin.find_by_pin_no params[:pin][:pin_no]
    flash.now[:success] = "Pin: #{p} is Avaliable"
  else
    flash.now[:error] = "Pin is not Avaliable"
    render 'fees'
  end
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...