予約状況がわかる画面を作成します。
予約情報はModel bookingに対応しますが、自動生成された画面をこのまま使うのはユーザビリティの面で少々難がありそうです。
まずは一週間の予約状況が一覧で確認できるような画面をイメージしてみます。
縦方向には、予約対象が並び、横方向(左から右へ)に今日から7日間分の予約状況が表示されるようにしてみたいと思います。
画面名(コントローラ名)はweekly_infoにしてみます。
$ ruby script/generate controller weekly_info index
最後のindexは、URLの指定をcontroller名まで指定した場合、デフォルトのアクションがindexとなっているため指定しておきました。
$ ruby script/generate controller weekly_info index
exists app/controllers/
exists app/helpers/
create app/views/weekly_info
exists test/functional/
exists test/unit/helpers/
create app/controllers/weekly_info_controller.rb
create test/functional/weekly_info_controller_test.rb
create app/helpers/weekly_info_helper.rb
identical test/unit/helpers/weekly_info_helper_test.rb
create app/views/weekly_info/index.html.erb
最後に、Viewのindex(画面)が作成されています。対応しているモデルがないので、中身はこんな感じです。
WeeklyInfo#index
Find me in app/views/weekly_info/index.html.erb
さて、いままで、ジェネレータに大分助けていただきましたが、ここからは、コーディングが必要になってしまいます。
ここで、考えが変わって、このページの名称(Controller)をweekly_info から booking_info に変更しました。
自動生成されたファイルの名称を全て変更すれば、問題ないようです。また、サーバを起動中の場合は、再起動しないと反映されないかも知れません。
それから、データベースのカレンダーのViewを作成しておきたいと思います。
おそらくいずれ何かの役に立つと思いますので。
$ ruby script/generate migration create_utility_numbers
これを次のように編集します。
class CreateUtilityNumbers < ActiveRecord::Migration
def self.up
create_table :utility_numbers do |t|
t.integer :num
end
(1..100).each do |i|
UtilityNumber.create(:num => i)
end
end
def self.down
drop_table :utility_numbers
end
end
いよいよVIEWの作成ですが、今回はPostgreSQLを使用しています。
RDBMSによって、方言があるので、ここはDBによってそれぞれ用意するしかないと思います。
良い方法があれば、ぜひご教示を。
class CreateWeeklyCalendarView < ActiveRecord::Migration
def self.up
execute %{
CREATE OR REPLACE VIEW weekly_carender_view AS
select date_val as sun,
date_val + 1 as mon,
date_val + 2 as tue,
date_val + 3 as wed,
date_val + 4 as thu,
date_val + 5 as fry,
date_val + 6 as sat
from (
select to_date(y_val || m_val || d_val, 'YYYYMMDD') as date_val from
(select to_char(num, '00') as d_val
from utility_numbers
where num < 32) td,
(select to_char(num, '00') as m_val
from utility_numbers
where num < 13) tm,
(select to_char(num + 1970, '0000') as y_val
from utility_numbers) ty
) t
where date_part('dow', date_val) = '0'
order by date_val;
}
end
def self.down
execute %{
DROP VIEW weekly_carender_view;
}
end
end
0 件のコメント:
コメントを投稿