2013-07-26 2 views
0

내가 응답을 포함하는 레일 튜토리얼 샘플 응용 프로그램을 확장하기 위해 노력하고있어NoMethodError :. NilClass

나는 사람을 지정하는 user_id 포함 된받는 모델을 생성 . 누구 응답이 해결되고 micropost_id

나는 내 사용자 모델에 다음과 같은 추가

class User < ActiveRecord::Base 
    ... 
    has_many :replies, foreign_key: "user_id", class_name: "Recipient", dependent: :destroy 
    has_many :received_replies, through: :replies, source: :micropost 
    ... 
    def feed 
    Micropost.from_followed_by_and_replying_to(self) 
    end 
    ... 
end 

그리고이 내 Micropost 모델 :.

class Micropost < ActiveRecord::Base 
    belongs_to :user 
    ... 
    has_many :recipients, dependent: :destroy 
    has_many :replied_users, through: :recipients, :source => "user" 
    ... 
    def self.from_followed_by_and_replying_to(user) 
    followed_ids = "SELECT followed_id FROM relationships 
        WHERE followed_id = :user_id" 
    replier_ids = "SELECT micropost_id FROM recipients 
        WHERE user_id = :user_id" 
    where("user_id in (#{followed_ids}) 
      OR id in (#{replier_ids}) OR user_id = :user_id", 
      user_id: user.id) 
    end 
    ... 
end 

StaticPages # 홈 액션 16,피드로드 :와 홈 페이지를 방문 체결 할 때 다음

class StaticPagesController < ApplicationController 
    def home 
    if signed_in? 
     @micropost = current_user.microposts.build 
     @feed_items = current_user.feed.paginate(page: params[:page]) 
    end 
    end 
    ... 
end 

를, 내가 공유 feed_item 부분 (응용 프로그램 /보기/공유/_feed_item.html에 대한 NoMethodError in StaticPages#Home 얻을. 이 라인에서 ERB는) :

<%= link_to gravatar_for(feed_item.user), feed_item.user %> 

그것은 gravatar_for 도우미 메서드가 사용 user.email에서 아마도 undefined method 'email' for nil:NilClass (입니다.

레일 콘솔에 Micropost.from_followed_by_and_replying_to([some user])을 호출하면 답변을 비롯하여 이후 사용자의 마이크로 포스트를 반환하는 데 문제가 없으므로 여기서 내 db 쿼리가 올바르지 않다고 생각하지 않습니다. 어떤 도움을 주시면 감사하겠습니다.

편집 (삭제이 일부 HTML)

응용 프로그램/뷰/static_pages/home.html.erb :

<% if signed_in? %> 
... 
    <%= render 'shared/user_info' %> 
    <%= render 'shared/stats' %> 
    <%= render 'shared/micropost_form' %> 
    <%= render 'shared/feed' %> 
... 
<% else %> 
... 
<% end %> 

응용 프로그램 /보기/공유/_feed.html.erb :

<% if @feed_items.any? %> 
    <%= render partial: 'shared/feed_item', collection: @feed_items %> 
    <%= will_paginate @feed_items %> 
<% end %> 

응용 프로그램 /보기/공유/_feed_items.html.erb :

<li id="<%= feed_item.id %>"> 
<%= link_to gravatar_for(feed_item.user), feed_item.user %> 
    <%= link_to feed_item.user.name, feed_item.user %> 
... 
</li> 
+0

'home.html.erb'도 게시 할 수 있습니까? – vee

+0

Micropost 클래스에 belongs_to : 사용자가 있습니까? – dasnixon

답변

0

gravatar_for이 전달 된 사용자의 email을 호출하면 feed_item.usernil이라는 오류 메시지가 표시됩니다.

줄을 link_to 앞에두고 실제로 이것이 nil인지 확인하십시오. 또한 오류의 스택 추적은 SO 질문에 넣을 수있는 가장 유용한 것들 중 하나입니다.

관련 문제