スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

Railsを試す 続き

さて、前に簡単にチュートリアルを試してから、自作で簡単なアプリを作った。

Javaでも作ったTodoリストをRailsに置き換えてみようと思った。
それにしても、他のチュートリアルや他の人にサイトにもあるのだが、TodoListってHello Worldに続く基本なのだろうか。私が作ったのは専ら自分で実際に使うためだったが。
今回は他の人のは参考にしないで自分独自に進めた。

Cookbookのチュートリアルである程度基本はつかめたので、あとはやりながら学んでいけばいいだろうと思ったが、それがよくなかった。こういうとき、どうしたらいいのだろうかというのが簡単にわからない。Rubyの習得もままならないままだったので、生産性はさほどよくない。

Webではチュートリアルは多いものの、体系立って説明しているものはない。パラメータとかセッションとかどういう仕組みになっているのかよくわからない。個人の日記などは参考になるが、しばしば情報が古かったりする。なので、Googleであれこれ探しながら問題を解決。

やはり本を買え、ということかな。きちんと勉強してから取り掛かったほうがいい。

以下、気づいた点、詰まった点。

1.テンプレート
 ruby script\generate scaffold tbl
 のコマンドでscaffoldを基にしたファイルを出力してこれを元に修正したのだが、あとからtableタグをすべてに仕込んだので効率が悪かった。テンプレートを修正してから実行すべきだった。

2.文字コード対策
application.rb
        before_filter :set_charset
        protected
        def set_charset
                @headers["Content-Type"] = "text/html; charset=Shift_JIS"
        end

3.結構型付けが厳しい(Ruby)
    <option value="1"<%= " selected" if @preference.finished == '1' %>>済み</option>
@preference.finished == 1ではだめだった。

4.dateのformatを変えたい
デフォルトでは、Sun Mar 26 12:00:45 東京 (標準時) 2006などと表示される。
environment.rbに以下を加えてフォーマットを変えることができる。
::ActiveSupport::CoreExtensions::Time::Conversions::DATE_FORMATS.update :default => "%m/%d %H:%M:%S"

5.validation
validateは変換された後に行われるからなのか、intのフィールドに文字列を指定しても引っかからない。文字列を入力すると0として扱われている。しかしvalidationで戻される値はそのまま文字列となっている。

6.検索ロジック
作ったオブジェクトは、todo, state, categoryの三つ。todoの検索条件にpreferenceオブジェクトを用いて、これはテーブルに一行だけ保存する。パラメータでは検索条件が、preference[category_id]などとして渡すようにした。
最初にテーブルから一行取り出し、パラメータにあるもので上書きし、保存し、そこからConditionを生成して、todoリストを取得する。

  def list
    @preference = Preference.find_first
    
    if params[:preference]
      params[:preference].each {|x|
        @preference.send('' << x[0] << '=', x[1])
      }
      @preference.update
    end

    condition = '1=1'
    @preference.attributes.each {|x|
      condition << ' AND ' << x[0] << '=\'' << x[1].to_s << '\'' if x[1] != nil && !['id','create_dt','update_dt','finished','sort'].include?(x[0])
    }
    
    ids = []
    State.find(:all, :select => 'id', :conditions => 'finished =' << @preference.finished).each {|x|
      ids << x.id
    }
    condition << ' AND state_id in (' << ids.join(',') << ')'

    p condition
    @todo_pages, @todos = paginate :todos, :per_page => 10, :conditions => condition, :order => @preference.sort

    @categories = Category.find_all
  end


rubyのスタイルは、javaとは違うし、またいろいろな書き方ができる。これよりももっとスマートな書き方もできると思う。習熟するまで結構時間がかかるような気がする。
railsを使うと記述量が少ないので生産性が高いといえるかもしれないが、習熟したとしても、せいぜい1.x倍ぐらいじゃないかと思う。宣伝文句である「10倍」はscaffoldをそのまま使うだけでよい場合だけだろう。

以下、参考サイト
tag[ rails ]
Find the Plural of a Word (Rails 1.0.0)
優しいRailsの育て方
Ruby on Rails の Wiki
masuidrive on rails
オブジェクト指向スクリプト言語 Ruby リファレンスマニュアル

関連記事
スポンサーサイト

コメント

非公開コメント

プロフィール

dayan

Author:dayan
小職は、SE(システムエンジニア)を専門としておりますが、技術的な情報を中心に、それ以外に経済関連の日記、たわいもない日記も載せていきます。
[公式HPもよろしく!]

天気予報

-天気予報コム- -FC2-
リンク
ブロとも申請フォーム

この人とブロともになる

カテゴリー
最近の記事
ブログ内検索
最近のコメント
最近のトラックバック
RSSフィード
月別アーカイブ


上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。