我正在尝试显示一个带有用户名称的图标,如果他们发布了一些内容。我想在索引操作中执行此操作。有没有办法从索引访问用户的微博?
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
答案 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 %>
虽然已经接受的答案 实现了预期的结果,但对于性能关键的大型应用程序,我不推荐它。