-1

Хорошо, сначала я хочу сказать, что я столкнулся с этой проблемой раньше, и ее обычно быстро исправить. Но на этот раз я действительно запутался.Неопределенный метод 'email' для nil: NilClass? - Ошибка Ruby on Rails

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

на странице моих сообщений, я перечисляю все комментарии, а также возможность добавлять новые комментарии.

сообщений СТРАНИЦА:

<%if @post.is_status?%> 
    <h5><%[email protected]%>:</h5> 
    <%[email protected]%><br> 
    Posted:<%[email protected]_at%><br><hr> 
<%else%> 
    <h5><%[email protected]%>:</h5> 
    <%=image_tag @post.body%><br> 
    Posted:<%[email protected]_at%><br><hr> 
<%end%> 

<h6>Comments:</h6> 
<%@comments.each do |x|%> 
    <%@user = x.user%> 
    <%=x.comment%> -<%[email protected]%> <br> 
<%end%> 

<%=form_for @comment do |x| %> 
    <%=x.hidden_field :post_id%> 
    <%=x.hidden_field :user_id%> 
    <%=x.label :comment%> 
    <%=x.text_area :comment%><br> 
    <%=x.submit%> 
<%end%> 

мои посты показывают в контроллере сообщений:

def show 
    @post = Post.find(params[:id]) 
    @comments = @post.comments.all 
    @comment = @post.comments.new(user_id: current_user.id) 
    end 

и, наконец, моей создать действие в моем комментарии контроллера:

def create 
    @comment=Comment.create(params.require(:comment).permit(:comment, :post_id, :user_id)) 
    if @comment.save 
     redirect_to root_path, notice: "saved" 
    else 
     redirect_to root_path, notice: "not saved" 
    end 
    end 

когда запрос проходит через я получаю следующее из журнала рельсов:

Parameters: {"utf8"=>"✓", "authenticity_token"=>"lOHcmJJ3ptDiizpt95/1xHQ4GQkcjyHsAfTHiH/23f0Rjds7pI0Ii0XzcZ3UFGCKap7jwvdl7pV8wr+8oNu+mg==", "comment"=>{"post_id"=>"22", "user_id"=>"1", "comment"=>"test123"}, "commit"=>"Create Comment"} 

Так что я могу видеть, как пропускается user_id = 1.

Выход моего шоу страницы пост дает мне:

comments: 
test123 -#<User:0x007fad5b4311a0> 

Так я могу видеть пользователь есть! если я изменить мой пост-шоу страницу как так:

<%=x.comment%> -<%[email protected]%> <br> 

я получаю следующий результат:

test123 -#<User id: 1, first_name: nil, last_name: nil, profile_picture: nil, created_at: "2015-07-02 03:51:14", updated_at: "2015-07-06 21:34:07", email: "[email protected]", encrypted_password: "$2a$10$7irTux0aMTbSXZUyB3Ubbux0MBhF.Z0Ll0QyY8pS1mv...", reset_password_token: nil, reset_password_sent_at: nil, remember_created_at: nil, sign_in_count: 12, current_sign_in_at: "2015-07-06 21:34:07", last_sign_in_at: "2015-07-06 21:28:18", current_sign_in_ip: #<IPAddr: IPv6:0000:0000:0000:0000:0000:0000:0000:0001/ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff>, last_sign_in_ip: #<IPAddr: IPv6:0000:0000:0000:0000:0000:0000:0000:0001/ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff>> 

Так я могу видеть, что user.email действует ...

однако при я изменить пост-шоу страница как так:

<%=x.comment%> -<%[email protected]%> <br> 

Я получаю

undefined method `email' for nil:NilClass 

Это странно, я знаю, что есть пользователь, и адрес электронной почты является действительным для этого пользователя, как видно из user.inspect

Любые идеи, почему его дает мне ошибку всухую класса?

+0

Можете ли вы разместить полную страницу показа? – Pavan

+0

только что опубликовал полную страницу! –

ответ

0

Похоже, что один из конкретного comment не связаныпользователя. Для быстрого исправления попробуйте приведенный ниже код.

<%= @user.try(:email) %> 
+0

у него есть пользователь - я могу видеть его, когда я иду @ user.inspect –

+0

@SUPERUSER В вашем коде вы повторяете '@ comments' и сохраняете' @ user' как 'x.user'. Поскольку '@ comments' представляет собой набор записей, кажется, что конкретный' comment' не связан с 'user'. – Pavan

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