私は、ユーザーが自分のトレーニングを追跡できるようにするために、RubyアプリケーションでRubyを構築しました。ユーザーはたくさんのトレーニングをしています。さらに、ユーザーは、ジムの所有者である場合、ボックス(ジム)を作成することができます。目的は、ジムに関連する情報のみを見ることができるようにユーザの活動をフィルタリングすることである。この場合、トレーニング。ボックスショーページでは、メンバーシップを通じてそのボックスに関連付けられているすべてのユーザーを表示し、その結果関連するユーザーのワークアウトを表示したいと思います。ここにセットアップがあります。アソシエーションの問題
ユーザー
class User < ActiveRecord::Base
has_many :boxes
has_many :workouts, :dependent => :destroy
end
ワークアウト
class Workout < ActiveRecord::Base
belongs_to :user
belongs_to :box
end
ボックス
class Box < ActiveRecord::Base
belongs_to :user
has_many :users, :through => :memberships
has_many :workouts, :through => :users
has_many :memberships
end
会員
class Membership < ActiveRecord::Base
belongs_to :user
belongs_to :box
end
<% @box.workouts.each do |workout| %>
<%= workout.title %><br/>
<%= workout.user.username %><br/><br/>
<% end %>
エラーを生成しない
...しかし、何もありません:私の/views/boxes/show.html.erbビューでは、私は、次があります。ここにログからの出力があります
Processing BoxesController#show (for 127.0.0.1 at 2010-12-01 22:19:59) [GET]
Parameters: {"id"=>"7"}
User Load (0.4ms) SELECT * FROM "users" WHERE ("users"."id" = '1') LIMIT 1
Box Load (0.3ms) SELECT * FROM "boxes" WHERE ("boxes"."id" = 7)
CACHE (0.0ms) SELECT * FROM "boxes" WHERE ("boxes"."id" = 7)
User Load (0.4ms) SELECT * FROM "users" WHERE ("users"."id" = 1)
Workout Load (0.3ms) SELECT "workouts".* FROM "workouts" INNER JOIN "users" ON "users".id = "workouts".user_id INNER JOIN "boxes" ON "boxes".id = "workouts".box_id WHERE ("workouts"."user_id" = 1) AND ((("workouts"."public" = 1) AND (("users".box_id = 7))) AND (("users".box_id = 7))) ORDER BY created_at DESC
Rendering template within layouts/application
Rendering boxes/show
User Load (0.6ms) SELECT "users".* FROM "users" INNER JOIN "memberships" ON "users".id = "memberships".user_id WHERE (("memberships".box_id = 7))
Workout Load (0.2ms) SELECT "workouts".* FROM "workouts" INNER JOIN "users" ON "workouts".user_id = "users".id WHERE (("users".box_id = 7))
Rendered shared/_navigation (0.6ms)
Completed in 104ms (View: 23, DB: 2) | 200 OK [http://localhost/boxes/7]
これはなぜ機能していないのですか?
明らかな質問はありますが、これらのクエリを満たすデータはありますか?また、どのコードが不足していますか、なぜ "ワークアウト"がありますか? "public" = 1'? – Todd
私は2番目の質問でそれに対処するつもりだった。 Workout.rbにはnamed_scopeがあります。ワークアウトは、整数フィールドworkout.publicの選出に基づいてパブリックまたはプライベートのいずれかになります。私はworkout.public == 1でフィルタリングします。私はこれを別の方法で行うべきだったのを知っています。 – bgadoci