2012年9月27日木曜日

テーブルに存在しないカラムをActiveRecordに追加するサンプル


「正しいMVCではModelが太る」と言われている。

俺が勝手に考える正しいMVCの実装。モデルはデータAPI!
http://kyoro353.hatenablog.com/entry/20111223/1324589389

Railsでは具体的にどうすれば良いだろうか?
apps/modelsフォルダ内の ActiveRecord を継承したクラスをカスタマイズすることだろうか。

初めの一歩として、テーブルに存在しないカラムを ActiveRecord に追加してみる。

▽現状のMigrationクラス
class CreateOnecolumnmodels < ActiveRecord::Migration
  def change
    create_table :onecolumnmodels do |t|
      t.string :name

      t.timestamps
    end
  end
end
▽現状のActiveRecordクラス
class Onecolumnmodel < ActiveRecord::Base
end
▽現状の表示結果

試しに、ActiveRecord クラスに attribute を追加してみるが、うまくいかない。

▽attributeを追加したActiveRecordクラス
class Onecolumnmodel < ActiveRecord::Base

  def initialize
    @secondname = "2nd name"
  end

  attr_accessor :secondname
end
▽追加したattributeを表示するshow.html.erb
<p id="notice"><%= notice %></p>

<p>
  <b>Name:</b>
  <%= @onecolumnmodel.name %>
</p>

<p>
  <b>Second Name:</b>
  <%= @onecolumnmodel.secondname %>
</p>


<%= link_to 'Edit', edit_onecolumnmodel_path(@onecolumnmodel) %> |
<%= link_to 'Back', onecolumnmodels_path %>
どうも ActiveRecord ではアクセサが機能しないようだ。
下記のように関数として実装したらうまくいった。

▽関数を追加したActiveRecordクラス
class Onecolumnmodel < ActiveRecord::Base

  def secondname
    return "2nd name"
  end
end
▽関数追加後の表示結果

0 件のコメント:

コメントを投稿