如果用户发布了某些内容,则显示图标

时间:2015-08-12 11:05:50

标签: ruby-on-rails ruby

我正在尝试显示一个带有用户名称的图标,如果他们发布了一些内容。我想在索引操作中执行此操作。有没有办法从索引访问用户的微博?

class User < ActiveRecord::Base
  has_many :microposts
end

class Micropost < ActiveRecord::Base
  belongs_to :user
end

用户控制器:

def index
  @users = User.all
end

def show
  @user  = User.find(params[:id])
  @posts = @user.microposts
end

2 个答案:

答案 0 :(得分:1)

index视图中:

<div id="users">
<% @users.each do |user| %>
  <div id="user-<%= user.id %>">
    <%= user.name %>
    <%= image_tag user.image if user.microposts %>
  </div>
<% end %>
</div>

答案 1 :(得分:1)

正如@DaveNewton指出的那样,通过发布/接受的方法,您可以拥有无​​限数量的数据库命中。我建议设置一个counter_cache。

# migration
def up
  add_column :users, :microposts_count, :integer

  User.includes(:microposts).find_each do |user|
    user.update_column(:microposts_count, user.microposts.size)
  end

def down
  remove_column :users, :microposts_count
end

# micropost.rb
belongs_to :user, counter_cache: true

# index.html
<% @users.each do |user| %>
  <div id="user-<%= user.id %>">
    <%= user.name %>
    <%= image_tag user.image if user.microposts_count > 0 %>
  </div>
<% end %>
  

虽然已经接受的答案 实现了预期的结果,但对于性能关键的大型应用程序,我不推荐它。