【问题标题】:How to show profile pics with activities feed?如何显示带有活动提要的个人资料图片?
【发布时间】:2026-01-14 00:05:01
【问题描述】:

我们如何在活动控制器(又名新闻源)中包含 Facebook 个人资料图片?

class ActivitiesController < ApplicationController
    def index
      @activities = PublicActivity::Activity.order("created_at desc").where(owner_id: current_user.following_ids, owner_type: "User")
    end
end

我从 user.rb 获得个人资料图片:

def self.from_omniauth(auth)
  where(provider: auth.provider, uid: auth.uid).first_or_initialize.tap do |user|
    user.provider = auth.provider
    user.image = auth.info.image #specifically this line &
    user.uid = auth.uid          #specifically this line
    user.name = auth.info.name
    user.oauth_token = auth.credentials.token
    user.oauth_expires_at = Time.at(auth.credentials.expires_at)
    user.password = (0...8).map { (65 + rand(26)).chr }.join
    user.email = (0...8).map { (65 + rand(26)).chr }.join+"@mailinator.com"
    user.save!
  end
end

活动指数

<% @activities.each do |activity| %>
    <% if @user.uid %>
    <%= image_tag @user.image %>
  <% else %>
    <%= gravatar_for @user %>
  <% end %>
    <%= link_to activity.owner.name, activity.owner if activity.owner %>
    <%= render_activity activity %>
<% end %>

我目前收到此错误:undefined method 'uid' for nil:NilClass

感谢您的专业知识!

【问题讨论】:

  • 错误提示@user不存在。您需要在控制器中加载@user。喜欢 @user = current_user 如果你正在使用设计
  • @kartikluke 很接近,但@user 需要是发帖的用户,而不是查看帖子的current_user。谢谢你至少有一张个人资料图片显示 - 让我们得到正确的 =)
  • 我从经验中举了一个例子。有关错误类型的帮助,以便您更好地调试它。

标签: ruby-on-rails ruby model-view-controller omniauth public-activity


【解决方案1】:

似乎@user 没有在ActivitiesController 的索引函数中分配。如果活动和用户之间存在关系,您应该这样做:

<% @activities.each do |activity| %>
    <% if activity.user.uid %>

【讨论】:

  • 谢谢弗兰克,但这给了我undefined method 'user' for #&lt;PublicActivity::Activity:0x007f96c1199f38&gt;
  • 我肯定遗漏了一些代码,但在您的示例中它可能被称为owner