我正在投资一个项目,我有一个投票系统,在投票模型的索引页面上我可以看到上周的平均投票。但是,我希望能够让用户能够选择平均评级之间的日期。我不确定该怎么做。
目前我有一个显示@average的视图,其定义为:
Vote.where(date: (Date.today - 7)..(Date.today)).average(:score)
我最初的目的是包括一个'日期范围'属性到模型然后具有从那些日期计算的平均值,这是由索引视图中的表单设置的,但这对于这样一个简单的任务来说似乎是很多开销。
非常感谢任何帮助。
答案 0 :(得分:1)
如你想从模型的角度来实现这一点, 您可以使用rails的动态范围来实现此目的,
在你的模特中,
<强>方法一:强>
C = np.array([1, 1, 2])
现在,在您的控制器或视图上,您可以调用类似的内容,
<强> class Vote < ActiveRecord::Base
scope :average_score, ->(date1,date2) { where(date: (date1)..(date2) )}
end
强>
方法2:
您可以采用方法并从方法中调用范围。
@average = Vote.average_score(Date.today - 7 , Date.today).average(:id)
现在,在您的控制器或视图上,您可以调用类似的内容,
<强> class Vote < ActiveRecord::Base
scope :average_score, ->(date1,date2) { where(date: (date1)..(date2) )}
def self.average_score_value(d1, d2)
self.average_score(d1,d2).average(:id)
end
end
强>
以下是带有用户表的示例,我已经@average = Vote.average_score_value(Date.today - 7 , Date.today)
列
created_at
范围是,
2.3.1 :036 > User.average_score(Date.today - 7,Date.today).average(:id)
(0.5ms) SELECT AVG(`users`.`id`) FROM `users` WHERE (`users`.`created_at` BETWEEN '2016-10-19' AND '2016-10-26')
=> nil
答案 1 :(得分:0)
您可以在索引页面上拥有form_tag
和几个date_field_tag
(例如start_date
和end_date
)和提交按钮,也许在顶部。当用户提交时,您可以使用输入的参数,并重新呈现索引。
@average = Vote.where(date: (params[:start_date].to_date)..(params[:end_date].to_date)).average(:score)
render :index
答案 2 :(得分:0)
您可以在index
页面
<%= form_tag '/index' do %>
<%= date_field_tag :start_date %>
<%= date_field_tag :end_date %>
<%= submit_tag %>
<% end %>
添加路线到您的routes.rb
post '/index', to 'users#average'
向UsersController添加方法
def average
@average = Vote.where(date: (params[:start_date].to_date)..(params[:end_date].to_date)).average(:score)
render :index
end