如何在索引中访问子属性

时间:2015-08-12 12:43:53

标签: ruby-on-rails ruby ruby-on-rails-4

Micropost在索引中包含我想要的内容(@ user.micropost.content)。我可以在节目中这样做,但不能在索引中。

我的模特:

class User < ActiveRecord::Base
  has_many :microposts
end

class Micropost < ActiveRecord::Base
  belongs_to :user
end

我的user_controller.rb:

def index
  @users = User.all
end

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

3 个答案:

答案 0 :(得分:2)

在用户控制器中尝试使用此代码:

def index
  @users = User.includes(:microposts).all
end

在您的索引页面中,您可以使用以下方式显示微博:

<% @user.microposts do |micropost| %>
  <p><%= micropost.title%></p>
<% end %>

这将允许您在视图中使用用户的微博,这也是一个很好的做法,因为数据库中微博的查询只会执行一次。

答案 1 :(得分:2)

首先你需要一个little eager loading to avoid N+1 queries

def index
  @users = User.includes(:microposts).all
end

然后在视图中你只需正常循环,你就可以访问对象

@users.each do |user|
  user.microposts.each do |micropost|
    micropost
  end
end

答案 2 :(得分:0)

您必须循环浏览@users = User.all并以这种方式访问​​每个用户的微博。

def index
  @users = User.all
  @users.each do |user|
    current_users_microposts = user.microposts
    # your code here
  end
end

不确定您的要求是什么,但您可以创建一个数组并将每组user.microposts附加到该数组上,以便将所有这些组合在一个变量中。