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