Rails从管理仪表板给学生排名

时间:2014-07-03 06:47:10

标签: mysql sql ruby-on-rails

我正在使用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进行编程特别陌生,请帮助我。

1 个答案:

答案 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