|
|
||
よくわかってないんだけど、今日気づいたことで。
class StoreController < ApplicationController def index @products = Product.salable_items end private def find_cart session[:cart] ||= Cart.new end end
Railsのこんなコードがあって、おもむろにProduct.salable_itemsとかCart.newとかしてるけどそれを使いますよーって宣言みたいのがどこにもない!
package Depot::Controller::Store; use strict; use warnings; use base 'Catalyst::Controller'; sub index : Private { my ($self, $c) = @_; $c->stash->{products} = $c->model('DBIC::Product')->salable_items; } sub find_cart : Private { my ($self, $c) = @_; $c->session->{cart} ||= $c->model('Cart')->new; }
こうかな。まあモデルクラスをuseしたりとかはないけど$c->modelを介してモデルクラスにアクセスする。
Railsでも裏でこういうことを暗黙的にやってくれてるのかなあ。
それにしてもRubyのコードは余分なものがなくてキレイでいいですね。
Perlはuse strict;とか、引数を自分で取ってきたりとか、必ず書かなきゃ行けないコードがあるからゴチャゴチャな印象が。特にこうやって並べてみると顕著にわかる。
つーか、こうやって書いてからまた気づくわけだけど、sessionも同じこと言えるし。
本読んでコード書いて一瞬わかった気になるけど、ちょっと突っ込んで考えると途端にわかんなくなるな。
trotr2007/07/07 14:10RailsはActiveSupportが裏でごにょごにょ
railsではvalidationをモデルで行うようになっています。その理由はrails本によれば
モデル層は、コードの世界とデータベースの間に立つ門番です。このアプリケーションでは、モデルを通らずにデータベースから情報を取り出したり、データベースに情報を保存したりすることはできません。
ということのようです。
いままでvalidationはコントローラ的な場所でやってきたのでちょっと違和感がありますが、この理由はもっともだと思いました。
また、Validator rails pluginというのがあり、validationをモデルから切り離すことができるようですがどのくらいメジャーなのかよくわかりませんでした。
あと日本語化はActiveHeartというプラグインを使うといい感じです。すごい簡単!
Rubyist Magazine - RubyOnRails を使ってみる 【第 5 回】 ActiveHeart
まだ経験が浅いせいか、古い情報、マイナーな情報、メジャーな情報というのをパッと見分けられずに苦労してます。。だんだん慣れていって空気というか感覚がわかるようになるといいんだけど。
$ sudo gem install vim-ruby $ vim-ruby-install.rb
http://vim.sourceforge.net/scripts/script.php?script_id=290
ruby-matchit.vimをダウンロードして~/.vim/ftplugin/rubyに置く。
http://www.vim.org/scripts/script.php?script_id=1567
http://www.vim.org/scripts/script.php?script_id=69
project-1.4.1.tar.gzをダウンロードして~/.vimに解凍。
ファイルを開いてる時に:Rprojectでなんか表示される。
使い方はまだよくわからない。
railsでHello, WorldやろうとしたらMac OS Xのvimで日本語が入力できなくていきなり躓いた。
なんか日本語を入力すると???とかになる。で、なんとか解決したのでメモ。
vimはたぶんデフォルトで入っていると思われる6.2というやつです。
答え。~/.inputrcに次の3行を書く。
set convert-meta off set input-meta on set output-meta on
.inputrcというのはreadlineの設定ファイルのようです。macでman readlineとしても「マニュアルない」って言われるのでLinuxでmanした。
convert-meta (On)
If set to On, readline will convert characters with the eighth bit set to an ASCII key sequence by
stripping the eighth bit and prefixing it with an escape character (in effect, using escape as the meta
prefix).
input-meta (Off)
If set to On, readline will enable eight-bit input (that is, it will not clear the eighth bit in the
characters it reads), regardless of what the terminal claims it can support. The name meta-flag is a
synonym for this variable.
output-meta (Off)
If set to On, readline will display characters with the eighth bit set directly rather than as a meta-
prefixed escape sequence.
全部デフォルトと逆にするのね。
意味はあまりわかっていません。
ググリ始めたとき、最初にUsing Japanese on Vim for Mac OS Xを読んで、この通りになってるのに全然ダメ!キーッ!ってなったけど無事解決できてぐっすり眠れそうです。タイトル的には完璧っぽいのにこんなに重要なことを省いてはいけないと思います。
追記(2007/06/25):
あと.profileで環境変数LANGを設定しないとダメみたいでした。
export LANG=ja_JP.UTF-8
この前MacPortsでMySQLをインストールしたんだけど、実はまだ動かしていませんでした。
とりあえず動くように。
$ sudo -u mysql /opt/local/lib/mysql5/bin/mysql_install_db
mkdirできないとかいろいろ言われるので、-u mysqlなしでやってみたり
$ sudo chown -R mysql:mysql /opt/local/var/db/mysql5 $ sudo chown -R mysql:mysql /opt/local/var/run/mysql5
とかした。
自動起動設定はせず、手動で
$ sudo /opt/local/lib/mysql5/bin/mysqld_safe &
で起動して確認。
$ mysql5 -uroot -A
大丈夫そう。停止はこれで。
$ mysqladmin5 -uroot shutdown
また、my.cnfは/opt/localに置けばよさげです(dataディレクトリに置いたらdeprecatedだって言われた)。文字コードはデフォルトでutf8になっているようだけどとりあえずこれだけ書いたおいた。
[mysqld] default-character-set=utf8 skip-character-set-client-handshake
あと、Max OS Xは大文字/小文字を区別するらしいので注意(Windowsと同じ)。lower_case_table_namesのデフォルト値は2です(Linuxは0、Windowsは1)。
Rails本のP25の注釈に、
大量のデータ処理が必要なアプリケーションをMySQLを使って本番環境で稼働させる場合には、おそらく、よりパフォーマンスの優れた低レベルMySQLインターフェースライブラリのインストールが必要になるでしょう。
って書いてあるんだけど、これはRubyベースかCベースかってことなんでしょうかね。
ググってみたらRubyist Magazine - RubyOnRails を使ってみる 【第 1 回】が見つかって、
MySQL の Ruby 拡張ライブラリとしては RAA:mysql-ruby と RAA:ruby-mysql というふたつの (互換性のある) ライブラリがあります (どちらもとみたさんによって書かれました)。 MySQL/Ruby は C言語で実装されたライブラリであり mysql.so が本体です。存在しない場合はインストールする必要があります。 一方、Ruby/MySQL はすべて Ruby で実装された (pure ruby) ライブラリであり、ActiveRecord には lib/active_record/vendor/mysql.rb として含まれています。
って書いてあるのでこれのことかな。
覚えておこう。
なにはともあれインストールから。
Mac OS Xを使ってるのでRuby 1.8.2がすでに入っているのですが、いくつか難点があるようなのでMacPortsでインストールしました。バージョンは1.8.6になりました。
$ sudo port install ruby $ ruby -v ruby 1.8.6 (2007-03-13 patchlevel 0) [powerpc-darwin8.9.0]
RubyForge: RubyGems: Project Infoから0.9.4をダウンロードしてインストール。
$ sudo ruby setup.rb $ gem -v 0.9.4
$ sudo gem install rails --include-dependencies Bulk updating Gem source index for: http://gems.rubyforge.org Successfully installed rails-1.2.3 Successfully installed rake-0.7.3 Successfully installed activesupport-1.4.2 Successfully installed activerecord-1.15.3 Successfully installed actionpack-1.13.3 Successfully installed actionmailer-1.3.3 Successfully installed actionwebservice-1.2.3 Installing ri documentation for rake-0.7.3... Installing ri documentation for activesupport-1.4.2... Installing ri documentation for activerecord-1.15.3... Installing ri documentation for actionpack-1.13.3... Installing ri documentation for actionmailer-1.3.3... Installing ri documentation for actionwebservice-1.2.3... Installing RDoc documentation for rake-0.7.3... Installing RDoc documentation for activesupport-1.4.2... Installing RDoc documentation for activerecord-1.15.3... Installing RDoc documentation for actionpack-1.13.3... Installing RDoc documentation for actionmailer-1.3.3... Installing RDoc documentation for actionwebservice-1.2.3... $ rails -v Rails 1.2.3
いちおう動くことを確認。
$ rails demo $ cd demo $ ruby script/server
Rubyのことはよく知りませんがとりあえずRailsから入門しようと思います。
ひとまずRailsによるアジャイルWebアプリケーション開発を買いました。
Rubyの本はRubyist Magazine 出張版 正しいRubyコードの書き方講座―RubyistのRubyistによる、Rubyistとそうでない人のためのに続けて2冊目です。
なんか変な順番という気がしないでもないですが。