Ruby研修2日目

今日の作業

テストケースの作成
Ruby研修

今日の作業でわかったこと&わからなかったこと

今日はRuby研修で質問がでました。
動的scaffoldでDBに存在しないidを指定したときのエラー画面の
カスタマイズはどうやってやるのか?
トランザクションのノーウエイトの指定をRailsにコーディング
でしていできるか?
この二つでした。

明日やること

Ruby研修

調べたことのまとめ

昨日シンボルについて調べてSymbolとStringの違いがわかったけど、
まだ違いがあるらしい。それは

Stringは破壊的なメソッドが使えるMutableなクラスだけど、
Symbolは破壊メソッドのないImmutableなクラスだということです。

とのこと。MutableとかImmutableという言葉初めて聞いたので調べたら

Mutableなオブジェクト 作成後も状態を変えることのできるオブジェクト
Immutableなオブジェクト 作成後にその状態を変えることのできないオブジェクト

次に破壊的なメソッドとは
自分自身を変更してしまう可能性があるメソッドのこと。
Ruby命名規則に破壊的メソッドには末尾に「!」を付けるというものがある。
Stringクラスにはstrip(前後の空白を削除するメソッド)というメソッドが二つ定義されている。
「strip」と「strip!」である。

irb(main):001:0> str = " Ruby "
=> " Ruby "
irb(main):002:0> str.strip
=> "Ruby"
irb(main):003:0> str
=> " Ruby "
irb(main):004:0> str.strip!
=> "Ruby"
irb(main):005:0> str
=> "Ruby"

「strip」は自分自身は何も変化せず、前後の空白を削除した新しい文字を返している。
「strip!」は元の文字自身の前後の空白を削除している。
このようなメソッドが破壊的メソッド。

DBへの接続設定を直接指定する方法での躓いた点

実践RubyonRailsWebプログラミング入門
http://www.amazon.co.jp/%E5%AE%9F%E8%B7%B5-Ruby-Rails-Web%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E5%85%A5%E9%96%80%E2%80%95%E7%84%A1%E9%A7%84%E3%81%AA%E3%81%8F%E8%BF%85%E9%80%9F%E3%81%AA%E9%96%8B%E7%99%BA%E7%92%B0%E5%A2%83-%E4%BC%8A%E5%B0%BE%E6%9C%A8/dp/4881665413/ref=sr_1_7/250-6466027-4913040?ie=UTF8&s=books&qid=1186563803&sr=8-7
のP100を参考に実行したら

$ ruby change.rb
change.rb:1:in `require': no such file to load -- active_record (LoadError)

というエラー!これはrequire 'rubygems'を一行目に加えて解決。
次に

$ ruby change.rb
/var/lib/gems/1.8/gems/activerecord-1.15.3/lib/active_record/vendor/mysql.rb:107:in `initialize': No such file or directory - /tmp/mysql.sock (Errno::ENOENT)

というエラー発生!
これは設定するとき:socketを設定していなかったため
http://cyclon.s11.xrea.com/mt/archives/2005/11/ruby_on_rails_m.htmlを参考に

require 'rubygems'
require 'active_record'

ActiveRecord::Base.establish_connection(:adapter => "mysql",:host => "localhost", :database => "sample_development",:username => "root",:password => "",:socket => "/var/run/mysqld/mysqld.sock")

class Custmer < ActiveRecord::Base
end

my_customer = Custmer.find(1)
my_customer.name = "nagase"
my_customer.address = "shiuzoka"
my_customer.save

で解決