2015-04-19 2 views
-3

Получение странной ошибки, что я не могу понять, почему это так.Ошибка в контроллере

Вот соответствующая часть контроллера:

def viewblg (num = 0, type = 0) 
    if type == 1 
     @blg = Compsci.find_by (num) 
    else 
     @blg = Personalb.find_by(num) 
    end 
    end 

Вот вид, в котором он не:

<h3><b><u> 
     <%= 
      if @blg.title != nil 
       @blg.title 
      else 
       "Error" 
      end 
     %> 
    </u></b></h3> 

Точная ошибка, я получаю:

undefined method `title' for nil:NilClass 

EDIT: вот страница просмотра, где я передаю переменные через link_to:

<ul> 
    <% @compsci.each do |blog| %> 
     <li><%= link_to "#{blog.title}", viewblog_path(blog.number, 1) %></li> 
    <% end %> 
    </ul> 

Кроме того, здесь есть путь маршрута у меня есть для link_to

get 'pblog' =>'blog#personal' 

ответ

2

Эта ошибка означает, что @blg является nil. Кроме того, .find_by кажется неправильным. Разве это не должно быть .find?

Если вы не пытаетесь найти по id, вы должны сделать .find_by_number(num). Или даже: .find_by(number: num)

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

<% if @blg.title.present? %> 
    <%= @blg.title %> 
<% else %> 
    Error 
<% end %> 
+0

Выполнение find_by_attribute (число: num) дает мне неопределенную ошибку метода. Я попытался сделать find_by (number: num), но дал мне такую ​​же неопределенную ошибку метода. Когда я пытаюсь найти (атрибут: num) или find (num), я не получаю никаких ошибок, но тогда вся страница просмотра не отображается и отображается пустой белый экран. –

+0

. Имя атрибута, которое вы ищете, является 'number' ? – bmpasini

+0

да, это правда –

0

Одна из этих линий Compsci.find_by (num) или Personalb.find_by(num) возвращается ноль. Возможно, вы должны использовать только find(num).

+0

находят (NUM) не будет давать какие-либо ошибки, но тогда весь вид страницы не получает оказанной, и я показал пустой белый экран –

+0

Теперь вы получите правильный объект. Возможно, название не 'nil', а пустая строка. Вы можете избежать этой проблемы, используя '@ blg.title.present?' Вместо '@blg.title! = Nil'. – dx7

+0

undefined method 'title' –

0

@blg nil, в результате чего ваш @blg.title будет звонить .title по телефону nil. Убедитесь, что вы передаете правильные параметры find_by - ваш по умолчанию 0, который вернет nil.

0

Для предотвращения undefined method 'xxxxx' for nil:NilClass в представлении, Вы должны проверить @blg не ноль перед вызовом его атрибуты

<% if @blg.present? %> 
    <%= @blg.title %> 
<% else %> 
    Error 
<% end %> 

Это синтаксис find_by

Client.find_by first_name: 'Lifo' 

http://guides.rubyonrails.org/active_record_querying.html#find-by

И ваше действие может выглядеть следующим образом

def viewblg (num = 0, type = 0) 
    if type == 1 
    @blg = Compsci.find_by(nubmer: num) 
    else 
    @blg = Personalb.find_by(number: num) 
    end 
end 
+0

Мои действия похожи на ваши. Когда я использую .find_by (число: num) в rails c, он возвращает правильный объект, как бы то ни было, с поправкой на страницу просмотра, которую он по умолчанию использует для else –

+0

. Я гость, вы получите 'type' и' num' из параметров поиска , Если это так, вам может потребоваться изменить тип -> 'params [: type]' и num -> 'params [: num]' – mininoz

+0

. Пожалуйста, обновите свой вопрос с помощью 'routes.rb' и' code link' на ваш взгляд. – mininoz

Смежные вопросы