Modelクラスのカラムフィールドアクセス
Modelクラスのカラムフィールドアクセス
Railsも使い込んでくると、コントローラー間で共通の処理を
なるべくModelクラスのほうに定義して共通化を図りたくなります。
その時に一箇所落とし穴があるので共有までに。
例えば画面からhogeという入力欄をつくった場合
class Fugas < ActiveRecord::Base
attr_accessor :hoge
end
とすると、実際にこのFugaテーブルにHogeというカラムが存在しなくても
画面側でうまく処理することができるようになります。
ここで、hogeのカラムが呼ばれた時には
fugaカラムにカッコをつけて返したいという場合
class Fugas < ActiveRecord::Base
attr_accessor :hoge
def hoge
return "(#{fuga})" if fuga
return nil
endend
さらに、hogeの値に「。」を取り付けてfugaカラムに登録したいという場合
class Fugas < ActiveRecord::Base
attr_accessor :hoge
def hoge
return "(#{fuga})" if fuga
return nil
enddef hoge=(val)
fuga = "#{val}." if val
endend
と書くことでうまく行くような気がするのですが
何故かこれがうまく行きません。
色々試した結果
class Fugas < ActiveRecord::Base
attr_accessor :hoge
def hoge
return "(#{fuga})" if fuga
return nil
enddef hoge=(val)
self.fuga = "#{val}." if val
endend
とするとうまく行くことがわかりました。
selfはモデルクラスのメソッドの中で使用すると
他の言語の"this."と同じ役割を果たすようです。
というわけで、最近では気持ち悪いので
class Fugas < ActiveRecord::Base
attr_accessor :hoge
def hoge
return "(#{self.fuga})" if self.fuga
return nil
enddef hoge=(val)
self.fuga = "#{val}." if val
endend
と、本来必要のない取得のほうにも"self."とつけるようにしています。