« RailsでWikiクローンを作る | メイン | Wiki新設 »
2005年09月06日
RailsでWikiクローンを作る 11: 管理画面
- 設定保存用DBテーブルconfsを新たに作る。confsの中身は1行だけ。
- confsに対応するモデル Conf も作る。
- 管理画面用コントローラとしてあらたにAdminコントローラを作る。
- 管理の中の各種設定ページをアクションとして実装する。
また、テーブルを作るときに、同時に適当な初期値を与えます。 sqlite3 用のスキーマは以下のようになります。
-- conf
create table confs (
id integer primary key,
site_name varchar(255) not null,
author_name varchar(255),
theme varchar(255),
use_wikiname boolean
);
insert into confs (site_name, author_name, theme, use_wikiname, use_plugin)
values ('hoge hoge', '名無しさん', 'hiki', 'true', 'false');
続いて、対応するモデルを generate コマンドで生成します。
% ruby script/generate model Conf
exists app/models/
exists test/unit/
exists test/fixtures/
create app/models/conf.rb
create test/unit/conf_test.rb
create test/fixtures/confs.yml
% ruby script/generate controller Admin basic
exists app/controllers/
exists app/helpers/
create app/views/admin
exists test/functional/
create app/controllers/admin_controller.rb
create test/functional/admin_controller_test.rb
create app/helpers/admin_helper.rb
create app/views/admin/basic.rhtml
続いて、生成された app/controllers/admin_controller.rb を以下のように修正します。
class AdminController < ApplicationController
layout 'wiki'
def basic
@conf = Conf.find 1
if request.post?
@conf.update_attributes(params[:conf])
if @conf.save
flash[:notice] = "保存されました。"
redirect_to :action => 'basic'
end
end
end
end
AdminコントローラではWikiコントローラ用に作ったレイアウトファイルを流用することにします。
名前付け規約により、デフォルトではコントローラ名からレイアウトファイル名が決定されますが、layout 'wiki' のようにコントローラ内で明示的にレイアウトファイル名を指定することもできます。
なお、既出のレイアウトファイル app/views/layouts/wiki.rhtml では、link_to でコントローラ名がwikiであることを仮定している部分があるので、明示的にコントローラ名を指定するように変更する必要があります(後述)。
basicアクションは、今までと違い、ひとつのメソッドでフォームの画面表示と保存を行うようにしています。 request.post? で、そのアクションが POST メソッドで呼ばれたのか、それ以外(GET メソッド)で呼ばれたのかわかるので、GET メソッドの場合はフォーム画面を表示するだけ、POSTメソッドの場合は設定を保存して flash で「保存されました」というメッセージを表示するようにしています。
なお、Conf.find の第一引数は、今までは :all を指定していましたが、テーブルの id 番号を指定することもできます。 Conf には id == 1 の行が1行だけ存在するので、決め打ちで Conf.find 1 と指定しています。
basicアクションのビューテンプレート(app/views/admin/basic.rhtml)は、以下のようになります。 この中で、select はselectタグを生成するヘルパーメソッドです。 詳しくはhttp://api.rubyonrails.com/classes/ActionView/Helpers/FormOptionsHelper.htmlを参照してください。
<% @title = "基本設定" %> <%= error_messages_for 'conf' %> <%if flash[:notice] %> <p style="margin-left: 2em; color: green"><%= flash[:notice] %></p> <% end %> <%= start_form_tag :action => 'basic' %> <div class="body"> <p>サイト名<br/> <%= text_field 'conf', 'site_name' %></p> <p>著者名<br/> <%= text_field 'conf', 'author_name' %></p> <p>テーマ<br/> <%= text_field 'conf', 'theme' %></p> <p>WikiNameによるリンク機能の利用<br/> <%= select 'conf', 'use_wikiname', [['true', true], ['false', false]] %></p> <%= submit_tag "Update" %> </div> <%= end_form_tag %>Adminコントローラの basic アクションの URL は、http://localhost:3000/admin/basic なので、そこにアクセスすると以下のような画面になります。

変更前:
conf = Struct.new(:use_plugin, :use_wikiname).new(false, false)
変更後:
conf = Conf.find 1
これで、ページ表示のときに設定値が反映されるようになります
(といっても、WikiName によるリンク機能の利用を on/off できるくらいですが)。
続いてページ表示に、基本設定で設定したサイト名やテーマを反映させるため、レイアウトファイル app/views/layouts/wiki.rhtml を書き換えます。 主な修正内容は以下の通り:
- wiki, adminの両コントローラでレイアウトを共用するため、link_to で :controller を明示指定
- title タグに site_name を入れる
- テーマに応じてスタイルシートのパスを変える
- フッタをつくって author_name を表示するようにする
<html>
<% conf = Conf.find 1 %>
<head>
<title><%= conf.site_name %>: <%= @title %></title>
<%= stylesheet_link_tag '/theme/hiki_base.css' %>
<%= stylesheet_link_tag "/theme/#{conf.theme}/#{conf.theme}" %>
</head>
<body>
<a name="top"></a>
<div class="main">
<div class="adminmenu">
<span class="adminmenu"><%= link_to '新規作成', :controller => 'wiki', :action => 'new' %></span>
<% if controller.controller_name == 'wiki' and controller.action_name == 'show'%>
<span class="adminmenu"><%= link_to '編集', :controller => 'wiki', :action => 'edit', :id => @page.name %></span>
<% end %>
<span class="adminmenu"><%= link_to 'FrontPage', :controller => 'wiki', :action => 'show', :id => 'FrontPage' %></span>
<span class="adminmenu"><%= link_to '一覧', :controller => 'wiki', :action => 'list' %></span>
<span class="adminmenu"><%= link_to '管理', :controller => 'admin', :action => 'basic' %></span>
</div>
<h1 class="header"><%= @title %></h1>
<div class="day">
<%= @content_for_layout %>
</div>
</div>
<div class="sidebar">
</div>
<div class="footer">Founded by <%= conf.author_name %>.<br></div>
</body>
</html>
投稿者 tam : 2005年09月06日 18:39
トラックバック
このエントリーのトラックバックURL:
http://tam.qmix.org/mt3/mt-tb.cgi/18
このリストは、次のエントリーを参照しています: RailsでWikiクローンを作る 11: 管理画面:
» blowjob cum gallery from blowjob cum gallery
[続きを読む]
トラックバック時刻: 2007年04月07日 05:50
トラックバック時刻: 2007年04月10日 03:51
» sugar free german chocolate cake recipe from sugar free german chocolate cake recipe
[続きを読む]
トラックバック時刻: 2007年04月10日 09:34
» food lasagna network recipe from food lasagna network recipe
[続きを読む]
トラックバック時刻: 2007年04月14日 04:08
» bedroom pics threesome from bedroom pics threesome
[続きを読む]
トラックバック時刻: 2007年04月22日 13:10
» girls ass licking boys from girls ass licking boys
[続きを読む]
トラックバック時刻: 2007年04月23日 15:00
» kobe tai mpeg from kobe tai mpeg
[続きを読む]
トラックバック時刻: 2007年04月24日 00:12
» videos of naked lesbisn women with big boobs from videos of naked lesbisn women with big boobs
[続きを読む]
トラックバック時刻: 2007年04月25日 02:08