我正在使用ruby on rails构建在线录入系统。我想在管理仪表板中单击按钮后,在注册过程结束后计算并存储包含user_id和排名的表中的排名。怎么做 ?我应该使用ActiveRecord :: Base.connect()然后使用execute()将它放在管理模型中的函数中吗? 我知道sql查询应该是
INSERT into ranks
(user_id, rank)
SELECT user_id,
(select count(*)+1 from academics B where A.hs_mks_per < B.hs_mks_per ) AS Rank
from academics A
order by hs_mks_per desc ;
我对使用rails进行编程特别陌生,请帮助我。
答案 0 :(得分:0)
<强>协会强>
您需要查看ActiveRecord Associations
由于Rails在relational database系统上运行 - 基本上意味着如果您创建了各种ActiveRecod
关联,它将允许您通过“父”对象调用关联数据< / p>
以下是一个例子:
#app/models/user.rb
Class User < ActiveRecord::Base
has_many :academics
has_one :rank
end
#app/models/academic.rb
Class Academic < ActiveRecord::Base
belongs_to :user
end
#app/models/rank.rb
Class Rank < ActiveRecord::Base
belongs_to :user
end
如果是这种情况,它将允许您这样做:
#app/controllers/users_controller.rb
Class UsersController < ApplicationController
def rank
user = User.find params[:id]
@rank = user.rank
end
end
-
<强>实施强>
如果您想在自己的系统中实现此功能,我建议您在控制器中设置rank
所需的数据,并直接保存到您的模型中:
#app/controllers/users_controller.rb
Class UsersController < ApplicationController
def save_rank
user = User.find params[:id]
rank = ... #-> your calculation here
user.rank.create(rank: rank)
end
end