2010/6/22 (一) アプリケーションのカスタマイズと検索機能

今日の半日は『RubyonRailsで作るWebアプリケーション入門』の本の4日目と5日目の部分を参照して、以下のStepでadnoteアプリケーションを作って、そしてテーブルの項目一個追加して、ScaffoldでMVCを作り直した。
そして、画面表示の英語の部分を日本語化しました。例えば、リンクと、ボタンと、タイトルと、メッセージなど。
その上、共通のHTMLファイルとスタイルファイルも少し編集して試した。
最後一番重要なことに、アプリケーションに名前で検索の機能を追加した。

--------------------------------
Step 1 adnoteアプリケーション新規
--------------------------------
>rails adnote -d postgresql
>cd adnote
>ruby script/generate scaffold note name:string address:string telno:string
* database.ymlファイルにusernameとpassword設定
>rake:db create
>rake:db migrate
>ruby script/server

http://localhost:3000/notesにアクセスして、項目を新規して、動作を確認する。

--------------------------------
Step 2 テーブル項目追加
--------------------------------
postgresqlのpgAdminⅢでadnote_developmentデータベースのnotesテーブルにmemo列(型:text)を追加する。
以下のように再度scaffoldによってモデルやコントローラ、それに表示ページのためのviewsフォルダ内のファイルを生成させる必要がある。
>ruby script/generate scaffold note name:string address:string telno:string memo:string
次のような質問が表示される。
overwrite app/views/notes/index.html.erb?(enter "h" for help)[Ynaqdh]a
aキーですべてのファイルを上書く。

--------------------------------
Step 3 アプリケーションの日本語化
--------------------------------
1. Viewのhtml.erbを文字コードをUTF-8を変換して、画面の英語表示を日本語に変換する。
   index.html.erb
   edit.html.erb
   new.html.erb
   show.html.erb
2. サイトタイトルの変更
   app/views/layouts/notes.html.erbファイルの<title></title>の部分を以下のように編集する。
   <title>アドレス帳:<%= controller.action_name %></title>

--------------------------------
Step 4 フッタ入れる
--------------------------------
notes.html.erbファイルに以下のコード入れると、フッタが表示されるようになる。
<hr>
<div align="center">
  Copyright(C) Geyuye 2010 All Rights Reserved.
</div>

--------------------------------
Step 5 ページのスタイルを変更
--------------------------------
public/stylesheets/scaffold.cssファイルを変更してみる。
body { background-color: #87ceed; color:#000 }

--------------------------------
Step 6 検索機能の追加
--------------------------------
1. 一覧画面に検索部分を追加
  index.html.erbファイルの先頭に次のようなコードを追加する
  <% form_tag :action => 'search' do %>
    <%= text_field :note, :name, :value => @keyword %>
    <%= submit_tag '検索する' %>
  <% end %>
2. コントローラに検索メソッドを追加
  notes_controller.rbファイルに次のようなメソッドを追加する
  def search
      @search = Note.find(:all, :conditions => ["name LIKE ?", "%" + params[:note][:name] + "%"])
      @keyword = params[:note][:name]
     
      respond_to do |format|
          format.html # search.html.erb
          format.xml { render :xml => @notes }
      end 
  end
3. 検索結果画面を作成
  search.html.rbファイルを作成する。
    ---------------------------------------
    <h1>検索結果</h1>

    <table>
      <tr>
        <th>名前</th>
        <th>住所</th>
        <th>電話番号</th>
        <th>メモ</th>
      </tr>

    <% for note in @search %>
      <tr>
        <td><%=h note.name %></td>
        <td><%=h note.address %></td>
        <td><%=h note.telno %></td>
        <td><%=h note.memo %></td>
        <td><%= link_to '詳細表示', note %></td>
        <td><%= link_to '編集', edit_note_path(note) %></td>
        <td><%= link_to '削除', note, :confirm => '本当に削除してもいいですか?', :method => :delete %></td>
      </tr>
    <% end %>
    </table>

    <br />

    <%= link_to '戻る', notes_path %>
    ---------------------------------------
   
  では、これでいろいろめちゃくちゃ編集した後と検索機能を追加後実行する結果:
 


 

--------------------------------
終わりのメモ
--------------------------------
ruby script/generate scaffold テーブル名(単数形) カラム名1:データ型 カラム名2:データ型

database.ymlにdevelopmentとproductionとtest三つの節がある。。。
Railsはフレームワークだから、開発モード(development)や実操業モード(production)、それにテストモード(test)の各モードで動作し、それぞれのモードで異なるデータベースを利用することができるようになっている。
>rake:db createコマンドでXXX(アプリケーション名)_developmentというデータベースが自動的に作られる。
>rake:db create allコマンドでXXX(アプリケーション名)_developmentとXXX_productionとXXX_test三つのデータベースが作られる。

base.rb - 継承元のスクリプト
notes_controller.rbファイルの中: class NotesController < ApplicationController
application_controller.rbファイルの中: class ApplicationController < ActionController::Base
じゃ、この継承元のスクリプトはどこにあるだろう。
フォルダ:ruby/lib/ruby/gems/1.8/gems/activerecord-2.3.5/lib/active_record
このファイルに、findやcreate、deleteといったメソッドが定義されいる。

HTMLソース
<% form_tag :action => 'search' do %>
⇒ <form action="/notes/search" method="post">
<%= text_field :note, :name, :value => @keyword %>
⇒ <input id="note_name" name="note[name]" size="30" type="text" />
<%= submit_tag '検索する' %>
⇒ <input name="commit" type="submit" value="検索する" />

Rubyファイルの作り方まだわかりません。。メソッドの書き方とか、パラメータの渡し方とか。。
ただ本の中のサンプルに従って検索機能を追加しましたけど、理解までちょっと。。
迷い続く。。

val gridData = mutableListOf<List<CalendarDayData>>() var currentDay = 1 for (row in 0 until 6) { val rowData = mutableListOf<CalendarDayData>() for (col in 0 until 7) { val cellIndex = row * 7 + col when { // 先頭の空白マス cellIndex < firstBlankCount -> { rowData.add( CalendarDayData( day = 0, isCurrentMonth = false, isEnabled = false, backgroundColor = "#FFFFFF" ) ) } // 該当月の日付 currentDay <= yearTotalTmp -> { rowData.add( CalendarDayData( day = currentDay, isCurrentMonth = true, isSelected = currentDay == selectedDay, isEnabled = true, backgroundColor = if (currentDay == selectedDay) { "#CEDFFF" } else { "#88B0FF" } ) ) currentDay++ } // 末尾の空白マス else -> { rowData.add( CalendarDayData( day = 0, isCurrentMonth = false, isEnabled = false, backgroundColor = "#FFFFFF" ) ) } } } gridData.add(rowData) } 这段代码中,和设计书上想要完成的效果有点不致,以设计书为准,不改变该机能 1.3.5 カレンダー入力領域を生成する。 1.3.5.1 先頭行のインデントをする。 No. 内部変数 計算式 属性 1 firstBlankCountTmp(先頭行空白マス数) 内部変数.firstYoubiTmp(当月1日目に対応する曜日)の順番 - 1 Int IF (firstYoubiTmp(当月1日目に対応する曜日) == "日") ❘ ❘ 処理継続 ❘ ELSE ❘ ❘ 内部変数.firstYoubiTmp(当月1日目に対応する曜日)の前に、内部変数.firstBlankCountTmp(先頭行空白マス数)の各マスを非活性にする。 ❘ ❘ 下表を参照し、内部変数.先頭行空白マス数の各マスに該当月以外の色を設定する。 ❘ No. 対象月(モード) 色コード(RGB) ❘ 1 該当月以外(昼モード) #FFFFFF ❘ 2 該当月以外(夜モード) #2A3489 ❘ END IF 1.3.5.2 日付を埋め込む。 内部変数.当月総日数をもとに、インスタンス変数.yearMonth(年月)の月の毎日を順番に埋めていく。 下表を参照し、インスタンス変数.yearMonth(年月)の月の毎日に該当月の色を設定する。 No. 対象月(モード) 色コード(RGB) 1 該当月(昼モード) #88B0FF 2 該当月(夜モード) #191F53 1.3.5.3 自動改行をする。 日曜日ごとに改行し、各週の日付を行揃えする。 1.3.5.4 最終行のインデントをする。 No. 内部変数 計算式 属性 1 lastBlankCountTmp(最終行空白マス数) 7 - 内部変数.lastYoubi(当月最終日に対応する曜日)の順番 Int IF (lastYoubiTmp(当月最終日に対応する曜日) == "土") ❘ ❘ 処理継続 ❘ ELSE ❘ ❘ 内部変数.firstYoubiTmp(当月1日目に対応する曜日)の後ろに、内部変数.lastBlankCountTmp(最終行空白マス数)の各マスを非活性にする。 ❘ ❘ 下表を参照し、内部変数.最終行空白マス数の各マスに該当月以外の色を設定する。 ❘ No. 対象月(モード) 色コード(RGB) ❘ 1 該当月以外(昼モード) #FFFFFF ❘ 2 該当月以外(夜モード) #2A3489 ❘ END IF 1.3.5.5 内部変数.年月日の日を強調表示する。 IF (dateParam(年月日).isNullOrEmpty()) ❘ ❘ 処理継続 ELSE ❘ ❘ 下表を参照し、内部変数.年月日の日を強調表示する。 ❘ No. 対象日(モード) 色コード(RGB) ❘ 1 該当日(昼モード) #CEDFFF ❘ 2 該当日(夜モード) #D5D4DF ❘ END IF
最新发布
10-29
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值