【问题标题】:Rails giving rank to student from admin dashboardRails 从管理仪表板给学生排名
【发布时间】:2014-07-03 06:47:10
【问题描述】:

我正在使用 ruby​​ on rails 构建在线录取系统。在注册过程结束后,我想通过单击管理仪表板中的按钮来计算并存储包含 user_id 和 rank 的表中的排名。怎么做 ?我应该使用 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 编程特别陌生,请帮助我。

【问题讨论】:

  • 请说清楚,你想问什么?

标签: mysql sql ruby-on-rails


【解决方案1】:

协会

你会想看看ActiveRecord Associations

由于 Rails 在 relational database 系统上运行 - 基本上意味着如果您创建各种 ActiveRecod 关联,它将允许您通过“父”对象调用关联数据

这是一个例子:

#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

【讨论】:

  • 我已经按照你所说的那样做了
  • 您的问题是关于如何保存数据,而不是如何计算您的排名。您能否参考您需要如何计算排名来更新您的问题?
猜你喜欢
  • 2019-09-01
  • 2016-07-02
  • 1970-01-01
  • 2014-06-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-17
相关资源
最近更新 更多