Ruby on rails 结社问题

Ruby on rails 结社问题,ruby-on-rails,ruby,model,associations,Ruby On Rails,Ruby,Model,Associations,我已经构建了一个ruby on rails应用程序,允许用户跟踪他们的训练。用户有很多训练。此外,如果用户是健身房所有者,则可以创建一个盒子(健身房)。其目的是过滤用户的活动,以便他们只能看到与其健身房相关的信息。在这种情况下,锻炼。在方框显示页面上…我想通过会员资格显示与该方框关联的所有用户,然后显示关联的用户训练。这是设置 使用者 思考一下为什么这样做不起作用?我认为问题在于,用户对某个框的成员身份的关联与您之前可能尝试过的内容混淆了。因为如果您查看日志中上次加载训练的时间: Workout

我已经构建了一个ruby on rails应用程序,允许用户跟踪他们的训练。用户有很多训练。此外,如果用户是健身房所有者,则可以创建一个盒子(健身房)。其目的是过滤用户的活动,以便他们只能看到与其健身房相关的信息。在这种情况下,锻炼。在方框显示页面上…我想通过会员资格显示与该方框关联的所有用户,然后显示关联的用户训练。这是设置

使用者


思考一下为什么这样做不起作用?

我认为问题在于,用户对某个框的成员身份的关联与您之前可能尝试过的内容混淆了。因为如果您查看日志中上次加载训练的时间:

Workout Load (0.2ms)   
SELECT "workouts".* 
FROM "workouts" 
INNER JOIN "users" ON "workouts".user_id = "users".id 
WHERE (("users".box_id = 7))
WHERE条件表示用户属于某个框,而我无法从您的代码中看到该框。由于该行没有任何错误,因此该字段必须存在于数据库中,您可能应该删除它

此外,您还指定了一个用户有许多框,但似乎您忘记添加它是通过:成员身份。我想正确的方法是:

class User < ActiveRecord::Base
  has_many :memberships
  has_many :boxes, :through => :memberships
  has_many :workouts, :dependent => :destroy
end
class用户:会员资格
有很多:锻炼,:依赖=>:破坏
结束
最后,通过关联将两个关联组合在一起将不起作用,至少在这种设置中不起作用。如果您想在特定框中为用户获取所有训练,则可以执行以下操作:

#In Controller
@box_users = @box.users.all(:include => :workouts)

#In View
<% @box_users.each do |user| %>
  <% user.workouts.each do |workout| %>
    <%= workout.title %>
    <%= user.username %>
  <% end %>
<% end %>
控制器中的
#
@box\u users=@box.users.all(:include=>:训练)
#鉴于

调用:include当然不是必需的,但它将生成一个sql查询,而不是这里的1+n

明显的问题,但是您有满足这些查询的数据吗?还有,缺少什么代码,为什么查询中有
“训练”。“public”=1
?我想在第二个问题中解决这个问题。我在Workout.rb中有一个命名的_范围,因为根据整数字段Workout.public的选择,训练可以是公共的,也可以是私有的。如果workout.public==1,我将按进行筛选。我知道我应该换一种方式来做这件事。这很好,而且似乎很有效。一个后续问题。我在Workout.rb中有一个命名范围:
命名范围:public\u workouts,:conditions=>{:public=>1}
。是否有任何方法可以通过它过滤训练。也许会以某种方式改变
@box\u users=@box.users.all(:include=>:workouts)
?好吧,你可以这样做,但我认为这会否定:include,因为它可能需要为每个用户查询数据库……我看到的唯一问题是,这里发生的情况是:workouts没有正确响应:order=>“在描述中创建“在这方面,它似乎是在每个用户内部排序,而不是在总体上排序。这有意义吗?实际上,我可以通过将:order添加到命名的_范围来影响顺序。仍然想知道如何集成用户的训练显示,而不是按用户显示。如果这是您所追求的结果,那么您可能只需要像@workouts=Workout.all(:include=>{:user=>:memberships},:conditions=>[“workouts.public='1'和memberships.box_id=?”,@box.id],:order=>“workouts.created_at DESC”)
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 %>
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]
Workout Load (0.2ms)   
SELECT "workouts".* 
FROM "workouts" 
INNER JOIN "users" ON "workouts".user_id = "users".id 
WHERE (("users".box_id = 7))
class User < ActiveRecord::Base
  has_many :memberships
  has_many :boxes, :through => :memberships
  has_many :workouts, :dependent => :destroy
end
#In Controller
@box_users = @box.users.all(:include => :workouts)

#In View
<% @box_users.each do |user| %>
  <% user.workouts.each do |workout| %>
    <%= workout.title %>
    <%= user.username %>
  <% end %>
<% end %>