내가 응답을 포함하는 레일 튜토리얼 샘플 응용 프로그램을 확장하기 위해 노력하고있어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>
'home.html.erb'도 게시 할 수 있습니까? – vee
Micropost 클래스에 belongs_to : 사용자가 있습니까? – dasnixon