循环遍历特定数据库并获取ActiveRecord :: Associations :: CollectionProxy

时间:2014-11-21 03:37:26

标签: ruby-on-rails rails-activerecord

我想遍历特定用户的所有team_members并在特定页面上显示他们的所有答案。而不是显示特定用户的team_members的所有答案。它向我展示了这一点。

Updates

  Prashanth

<ActiveRecord::Associations::CollectionProxy::ActiveRecord_Associations_CollectionProxy_Answer:0x00000001b2ce28>

  Sai

 <ActiveRecord::Associations::CollectionProxy::ActiveRecord_Associations_CollectionProxy_Answer:0x00000001b21230>

用户模型

class User < ActiveRecord::Base
  has_many :team_members
end

TeamMember模型

class TeamMember < ActiveRecord::Base
  belongs_to :user
  has_many :answers
end

答案模型

class Answer < ActiveRecord::Base
  belongs_to :team_member
end

这是我的answers / index.html文件,我循环浏览特定团队成员的所有答案。

<h1>Updates</h1>

<% if @answers.count > 0 %>
<% @answers.each do |answer| %>
  <blockquote>
    <p><%= answer.name %></p>
    <small><%= answer.answers %></small>
  </blockquote>
<% end %>
<% else %>
<p><em>Oops, doesn't look like there are any posts yet.</em></p>
<% end %>

这是我的架构

ActiveRecord::Schema.define(version: 20141118133533) do

  # These are extensions that must be enabled in order to support this database
  enable_extension "plpgsql"

  create_table "answers", force: true do |t|
    t.string   "answer"
    t.integer  "team_member_id"
`  `t.datetime "created_at"
    t.datetime "updated_at"
    t.string   "name"
  end

  add_index "answers", ["team_member_id"], name: "index_answers_on_team_member_id", using: :btree

  create_table "team_members", force: true do |t|
    t.string   "email"
    t.datetime "created_at"
    t.datetime "updated_at"
    t.string   "name"
    t.integer  "user_id"
 end

 add_index "team_members", ["user_id"], name: "index_team_members_on_user_id", using: :btree

 create_table "users", force: true do |t|
  t.string   "email",                  default: "", null: false
  t.string   "encrypted_password",     default: "", null: false
  t.string   "reset_password_token"
  t.datetime "reset_password_sent_at"
  t.datetime "remember_created_at"
  t.integer  "sign_in_count",          default: 0,  null: false
  t.datetime "current_sign_in_at"
  t.datetime "last_sign_in_at"
  t.string   "current_sign_in_ip"
  t.string   "last_sign_in_ip"
  t.datetime "created_at"
  t.datetime "updated_at"
end

add_index "users", ["email"], name: "index_users_on_email", unique: true, using: :btree
add_index "users", ["reset_password_token"], name: "index_users_on_reset_password_token", unique: true, using: :btree

end

这是我的AnswersController

class AnswersController < ApplicationController
  before_action :authenticate_user!

  def index
    @answers = current_user.team_members.each do |team_member|
         team_member.answers.all
    end

  end



end

我应该在index.html或asnwers控制器中更改什么才能获得答案列表?

2 个答案:

答案 0 :(得分:0)

如果你的answer.answers是一个字符串数组,那么只需将视图行更改为:

<small><%= answer.answers.join ', ' %></small>

如果answer.answers包含带有包含实际答案字符串的字段的记录,则使用(如果该字段被调用&#39; body&#39;,否则将body更改为字段名称):

<small><%= answer.answers.map(&:body) %></small>

答案 1 :(得分:0)

在你的控制器中试试这个:

class AnswersController < ApplicationController
  before_action :authenticate_user!

  def index
    @answers = Answers.where(team_member: current_user.team_members)
  end
end

并在您看来:

<% if @answers.count > 0 %>
  <% @answers.each do |answer| %>
    <blockquote>
      <p><%= answer.name %></p>
      <small><%= answer.answer %></small>
    </blockquote>
  <% end %>
<% else %>
  <p><em>Oops, doesn't look like there are any posts yet.</em></p>
<% end %>