class SomeTable < ActiveRecord::Base
set_table_name :some
end
クラス名が SomeTable の場合、デフォルトでは some_tables を参照しますが、some を参照するように変更。
=== プライマリキーカラム ===
マイグレーション定義
class CreateSomeTable < ActiveRecord::Migration
def self.up
create_table :sometable, :primary_key => :code do |t|
t.string :name, :limit => 20
t.timestamp
end
end
def self.down
drop_table :sometable
end
end
code というカラムが integer, auto increment でプライマリキーとして作成されます。
class SomeTable < ActiveRecord::Base
set_primary_key :code
end
デフォルトでは id カラムをプライマリキーとして参照しますが、code を参照するように変更。
=== プライマリキーに文字列(VARCHAR)カラムを指定 ===
class CreateSomeTable < ActiveRecord::Migration
def self.up
create_table :sometable, :primary_key => :code do |t|
t.column :code, :string, :limit => 20
t.string :name, :limit => 20
t.timestamp
end
end
def self.down
drop_table :sometable
end
end
=== 複合プライマリキー ===
プラグイン「composite_primary_keys」をインストール
gem install composite_primary_keys
config/environments.rb の末尾に追記
require 'composite_primary_keys'
テーブルの定義
class CreateSomeTable < ActiveRecord::Migration
def self.up
create_table :sometable, :primary_key => [:code, :subcode] do |t|
t.column :code, :string, :limit => 6
t.column :subcode, :string, :limit => 2
t.string :name, :limit => 20
t.timestamp
end
end
def self.down
drop_table :sometable
end
end
複合プライマリキーの定義
class SomeTable < ActiveRecord::Base
set_table_name :sometable
set_primary_keys :code, :subcode
end
複合プライマリキーでの検索
row = SomeTable.find([1,1])
プライマリキー項目が文字列(VARCHAR)の場合は、文字列を指定。
row = SomeTable.find(['1','1'])
※composite_primray_keys のバージョンによって、ActiveSupport に依存があるので注意
^composite_primary_keys^ActiveSupport^
|2.2.2|>=2.2.0(2.3.0でもOKだった)|
|1.1.0|>=2.1.2|
|1.0.10|>=2.1|
|0.9.93|=2.0.2|
Rails 2.0.5 の場合、1.0.10 も 0.9.93 のどちらも適合しないため使えなかった。
===== コントローラ =====
===== ビュー =====
==== anchor ====
* 表示:entry_path(<対象モデル名>)
* 一覧:entries_path
* 編集:edit_entry_path(<対象モデル名>)
* 新規:new_entry_path
==== partial ====
* render :partial => '<ビュー名>' # _ビュー名.html.erb を参照
* render :partial => @<モデル名>
==== flash ====
if flash[:notice]
flash にメッセージがある場合のみ表示
==== ヘルパーメソッド ====
=== タグ処理 ===
== content_tag ==
<%= content_tag(:div, flash[:notice], :id => 'notice') if flash[:notice] %>
== stylesheet ==
<%= stylesheet_link_tag '<スタイルシート1>', '<スタイルシート2>' %>
=== 変換系 ===
== h ==
HTML タグをエスケープ
== number_to_currency ==
数値を通貨記号付きの書式で変換
http://api.rubyonrails.org/classes/ActionView/Helpers/NumberHelper.html#M001464
==== その他 ====
* simple_format(auto_link(<モデル名>.<データ名>))
* error_messages_for :<データ名>
===== 構成 =====
==== config/route.rb ====
(例)
* map.signup '/signup', :controller => 'user_sessions', :action => 'new'
* map.login '/login', :controller => 'sessions', :action => 'new'
* map.logout '/logout', :controller => 'sessions', :action => 'destroy'
===== スクリプト =====
==== scaffold ====
* ruby script/generate scaffold <コントローラ名> <モデル名> # 1.2.x
* ruby script/generate scaffold <モデル名> <データ名>:<データ型> [<データ名>:<データ型>..]
==== generate ====
=== controller ===
ruby script/generate controller <コントローラ名>
=== migration ===
== テストデータ作成 ==
ruby script/generate migration add_test_data(マイグレーション名)
===== プラグイン =====
==== gettext(メッセージ日本語化) ====
=== インストール ===
sudo gem install gettext
=== config/environment.rb ===
require 'gettext/rails'
最後に追加(最後の end の後ろ)
=== controller/application.rb ===
init_gettext "<アプリケーション名>"
==== restful_authentication(認証) ====
vender/plugins/restful_authentication
=== URL ===
http://svn.techno-weenie.net/projects/plugins/
=== controller/application.rb ===
include AuthenticatedSystem
=== controller/<認証経由させたいコントローラ> ===
before_filter :login_required
==== file_column ====
vender/plugins/file_column
=== URL ===
http://filecolumn.googlecode.com/svn/tags/
==== ImageMagick ====
sudo port install ImageMagick
gem install rmagick
==== will_paginate ====
gem install will_paginate
=== 設定 ===
config/environment.rb の最後に追加
require 'will_paginate'
=== コントローラ ===
@users = User.paginate :page => params[:page], :per_page => 10
=== ビュー ===
<% for user in @users -%>
<%= link_to user.name, :action => 'edit', :id => user.id %>
<% end -%>
<%= will_paginate @users %>
====== 気付いたこと ======
===== ActionRecord =====
==== Update_all ====
* update_all メソッドでデータを更新すると、updated_at カラムの値(更新日付)が更新されない。
===== trouble shooting =====
==== gettext ====
=== モデル名とテーブル名が異なる場合 rake gettext:updatepo でエラーが発生 ===
エラーメッセージ
undefined method `untranslate_all?' for Master(code: string, no: integer, name: string):Class
config/environment.rb の最後に次の行を追記
require 'gettext/rails'
=== undefined method `set_primary_keys' が発生 ===
回避策はあるかも知れないが、とりあえず無視しておく。
=== rake gettext:updatepo を実行するとエラー ===
== 現象 ==
rake gettext:updatepo を実行すると次のエラーメッセージが出力される。
rake aborted!
`msgmerge' may not be found.
Install GNU Gettext then set PATH or MSGMERGE_PATH correctly.
== 対応 ==
- 「[[http://www.yotabanana.com/lab/20070714.html#p04|2. GNU Gettextが入っていない環境ではrmsgmergeを使う]]」を参考に「Ruby-GNOME2 Win32 GUI Installer」をダウンロードするには
- http://ruby-gnome2.sourceforge.jp/hiki.cgi? の「Download」をクリック
- ruby-gnome の最新リリースには Windows Installer が用意されていないので
- 「ruby-gnome2」をクリックして「ruby-gnome2-0.16.0」をクリックし、
- [[http://downloads.sourceforge.net/ruby-gnome2/ruby-gnome2-0.16.0-1-i386-mswin32.exe?use_mirror=jaist|ruby-gnome2-0.16.0-1-i386-mswin32.exe]] をダウンロード
- インストールされるファイルに msgmerge が含まれているので PATH に追加。\\
(C:\Program Files\ruby-1.8 ディレクトリ以下にファイル・フォルダが追加されるかたちでインストールされる。⇒ C:\Program Files 以下に専用のフォルダを作ってインストールされる訳ではない)
* PATH に追加するパス\\
C:\Program Files\ruby-1.8\lib\GTK\bin
== Mac ==
Mac の場合は Locomotive を入れるそうです。\\
[[http://d.hatena.ne.jp/kurusaki/20080830/p3|Ruby-GetTextで`msgmerge' may not be found. - kurusaki note]]