2016-04-09 5 views
0

Это ошибка, я получаю:условных пользователи/показать страницу для отображения информации или не на основе пользователей, создав его

Showing /home/ubuntu/workspace/UMUV/app/views/users/show.html.erb where line #6 >>raised: 

undefined method `name' for nil:NilClass 

Это мое условные пользователей/шоу:

<% if @profile_info.present? %> 
    <%= @profile_info.region.name %> 
<% else %> 
    <%= @user.email%> 
<% end %> 

Это находится в пользователях/контроллере:

def show 
    @user = User.find(params[:id]) 
    @profile_info = Profile.find_or_initialize_by(user_id: params[:id]) 
    end 

Я в принципе хочу знать, как не ошибка, когда я посещаю пользователь страницу профиля и пользователь час asn't обновил (а) свой профиль. Отображение страницы отлично работает, если я обновляю профиль пользователя с помощью «страницы редактирования» вручную.

Пожалуйста, помогите с условным. У меня также есть чувство, что я могу создать метод в user.rb или users/controller, но на самом деле не знаю, как реализовать это условие, чтобы делать то, что я хочу.

Спасибо

ответ

1

Ну вы всегда можете протестировать initalized объект против сохраненного объекта с помощью new_record? - что бы сделать ваш выше вид больше похож:

<% if @profile_info.new_record? %> 
    <%= @user.email%> 
<% else %> 
    <%= @profile_info.region.name %> 
<% end %> 

также вы могли бы воспользоваться try на части вашей страницы, которые не удается корректно, если атрибут не существует, как

@profile_info.region.try(:name) 
+0

спасибо так много TRH. оба ваши предложения помогли! они оба работают очень хорошо. я изо всех сил старался присутствовать? ноль? пусто? и т. д., но я думаю, что я не очень хорошо понимаю разницу. Поэтому я лучше читаю обо всех этих проблемах. Вероятнее всего, это произойдет в ближайшее время. Большое вам спасибо, хотя я вернусь и уклоняюсь, как только у меня появятся правильные точки репутации. – loloso

0

Поскольку ваша ошибка с именем @profile_info.region.name не присутствуя вы могли бы изменить ваше условное к:

<% if @profile_info.region.name.present? %> 
    <%= @profile_info.region.name %> 
    <% else %> 
    <%= @user.email%> 
    <% end %> 

Или, если вы действительно хотите TES т @profile_info.present? можно гнездятся условными, как это:

<% if @profile_info.present? %> 
    <% if @profile_info.region.name.present? %> 
     <%= @profile_info.region.name %> 
    <% end %> 
    <% else %> 
    <%= @user.email%> 
    <% end %> 

Я надеюсь, что помогает!

+0

спасибо lflores. я пробовал настоящее? метод раньше, но не помог. ответы от abhilash и trh, используя попытку! спасибо, хотя за вашу помощь. это место удивительно, и я рад, что помогите друг другу здесь. я новичок во всем этом, поэтому я рад видеть все это. Спасибо. – loloso

2

В вашем шоу странице вы можете заменить это:

<% if @profile_info.present? %> 
    <%= @profile_info.region.name %> 
<% else %> 
    <%= @user.email%> 
<% end %> 

с этим:

<% if @profile_info.present? %> 
    <%= @profile_info.region.try(:name) %> 
<% else %> 
    <%= @user.try(:email)%> 
<% end %> 

, а также пройти через этот пост: http://everydayrails.com/2011/04/28/rails-try-method.html

+0

Большое спасибо Abhilash. что сработало !!! Спасибо. когда у меня больше очков репутации, я возвращаюсь и повышаю. Спасибо... – loloso