【发布时间】:2013-11-18 17:57:16
【问题描述】:
我使用具有时间范围的 rails 做了一个应用程序,我正在尝试创建一个动态参数以不重复我每年的所有时间,我只想从我的控制器中选择年份和查询。
这是我的桌子:
|policies|
|id| |date_ini| |date_end|
1 2013-01-01 2014-01-01
2 2012-02-01 2013-02-01
3 2013-03-01 2013-03-03
4 2013-04-01 2013-08-01
这是范围:
date_ini <= range_of_each_policy <= date_end
这是使用 2013 年的逻辑:
|jan| |feb| |mar| |apr| |may| |jun| |jul| |ago| |sep| |oct| |nov| |dic|
id1 id1 id1 id1 id1 id1 id1 id1 id1 id1 id1 id1
id2 id2 __________________________________________________________
__________ id3 ______________________________________________________
_______________ id4 id4 id4 id4 id4 _______________________
它还会按月显示:
jan feb mar apr.........sep oct nov dec
2 2 2 2.... 1 1 1 1
这是使用 mysql 查询总和:
SET @year := 2013;
SELECT
SUM(CONCAT(@year, '-01-01') BETWEEN date_ini AND date_end) Jan,
SUM(CONCAT(@year, '-02-01') BETWEEN date_ini AND date_end) Feb,
SUM(CONCAT(@year, '-03-01') BETWEEN date_ini AND date_end) Mar,
SUM(CONCAT(@year, '-04-01') BETWEEN date_ini AND date_end) Apr,
SUM(CONCAT(@year, '-05-01') BETWEEN date_ini AND date_end) May,
SUM(CONCAT(@year, '-06-01') BETWEEN date_ini AND date_end) Jun,
SUM(CONCAT(@year, '-07-01') BETWEEN date_ini AND date_end) Jul,
SUM(CONCAT(@year, '-08-01') BETWEEN date_ini AND date_end) Aug,
SUM(CONCAT(@year, '-09-01') BETWEEN date_ini AND date_end) Sep,
SUM(CONCAT(@year, '-10-01') BETWEEN date_ini AND date_end) Oct,
SUM(CONCAT(@year, '-11-01') BETWEEN date_ini AND date_end) Nov,
SUM(CONCAT(@year, '-12-01') BETWEEN date_ini AND date_end) `Dec`
FROM
policies
WHERE
date_end >= CONCAT(@year, '-01-01')
AND
date_ini <= CONCAT(@year, '-12-01')
这里是链接http://sqlfiddle.com/#!2/dfcd5/2
这是我的控制器:
@year= params[:year]
@var =Policy.find_by_sql("SELECT
SUM(CONCAT(@year, '-01-01') BETWEEN date_ini AND date_end) as jan,
SUM(CONCAT(@year, '-02-01') BETWEEN date_ini AND date_end) as feb,
SUM(CONCAT(@year, '-03-01') BETWEEN date_ini AND date_end) as mar,
SUM(CONCAT(@year, '-04-01') BETWEEN date_ini AND date_end) as apr,
SUM(CONCAT(@year, '-05-01') BETWEEN date_ini AND date_end) as may,
SUM(CONCAT(@year, '-06-01') BETWEEN date_ini AND date_end) as jun,
SUM(CONCAT(@year, '-07-01') BETWEEN date_ini AND date_end) as jul,
SUM(CONCAT(@year, '-08-01') BETWEEN date_ini AND date_end) as aug,
SUM(CONCAT(@year, '-09-01') BETWEEN date_ini AND date_end) as sep,
SUM(CONCAT(@year, '-10-01') BETWEEN date_ini AND date_end) as oct,
SUM(CONCAT(@year, '-11-01') BETWEEN date_ini AND date_end) as nov,
SUM(CONCAT(@year, '-12-01') BETWEEN date_ini AND date_end) as `dec`
FROM
policies
WHERE
date_end >= CONCAT(@year, '-01-01')
AND
date_ini <= CONCAT(@year, '-12-01') )"
这是我的看法:
<% form_tag :controller=>"policy_management/policy",:action=>"generate_statistical_report" do %>
Select year:
<%= select_tag "year",options_for_select([ ["2012",2012],["2013",2013],["2014",2014]],params[:year].to_i) %>
<%= submit_tag "Buscar", :name => nil %>
<% end %>
<%= @var[0].try(:jan) %>
这是我的日志:
Policy Load (3.2ms) SELECT
SUM(CONCAT(@year, '-01-01') BETWEEN date_ini AND date_expired) as jan,
SUM(CONCAT(@year, '-12-01') BETWEEN date_ini AND date_expired) `Dec`
FROM
policies
WHERE
date_expired >= CONCAT(@year, '-01-01')
AND
date_ini <= CONCAT(@year, '-12-01')
在我看来,我的选择框没有传递我的参数@year
请问有人可以帮我解决这个问题吗?
我将非常感谢您的帮助或想法。
【问题讨论】:
标签: ruby-on-rails ruby ruby-on-rails-3 ruby-on-rails-2