ユーザ用ツール

サイト用ツール


lang:rails

Rails

セットアップ

Rails の最新版をインストール

gem install rails 

Rails のバージョンを指定してインストール

gem install rails -v 2.0.5 

Rails のバージョンを確認

rails -v 

ruby-vim

gem install vim-ruby 
vim-ruby-install.rb 

<color blue>vim-ruby-install.rb</color> は $RUBY_HOME/gems/1.8/gems/vim-ruby-<バージョン>/bin にインストールされます。

設定

アプリケーションからデータベースにアクセスしない場合の設定

config/environment.rb を編集。

# config.frameworks -= [ :active_record, :active_resource, :action_mailer ] 

となっているところを

config.frameworks -= [ :active_record ] 

に変更して保存し、ActiveRecord フレームワークを使わないようにします。

アプリケーション作成

アプリケーションを作成

rails <アプリケーション名> 

バージョンを指定してアプリケーションを作成

rails _2.0.5_ <アプリケーション名> 

config/database.yml の設定に従ってデータベースを作成

_development

rake db:create 

_test

rake db:create RAILS_ENV=test 

_production

rake db:create RAILS_ENV=production 

scaffold 実行

script/generate scaffold website title:string url:string comment:text 

DB の migrate を実行(マイグレーションファイルの内容をDBに反映)

rake db:migrate 

コントローラ作成

script/generate controller <コントローラ名> 

コントローラと同時にビューとビューに対応するメソッドを作成

script/generate controller <コントローラ名> <ビュー名> 

モデル

validation

  • validates_presence_of :<データ名>[, <データ名>..]
  • validates_numericality_of :<データ名>[, <データ名>..]
  • validates_length_of :<データ名>, :within ⇒ <最小桁数>..<最大桁数>
  • validates_confirmation_of :<パスワード項目名>
  • validates_uniqueness_of :<データ名> [, <データ名>..] [, :case_sensitive ⇒ [true|false]
  • validates_format_of :<データ名>[, <データ名>..], :with ⇒ %r{<フォーマット>}[i], :message ⇒ <メッセージ>

DB に対するデフォルトの設定を変更

テーブル名

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_keysActiveSupport
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

その他

  • 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

controller/application.rb

include AuthenticatedSystem 

controller/<認証経由させたいコントローラ>

before_filter :login_required 

file_column

vender/plugins/file_column

URL

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 

ビュー

<table> 
  <% for user in @users -%> 
    <tr> 
      <td><%= link_to user.name, :action => 'edit', :id => user.id %></td> 
    </tr> 
  <% end -%> 
</table> 
<%= 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. 
対応
  1. 2. GNU Gettextが入っていない環境ではrmsgmergeを使う」を参考に「Ruby-GNOME2 Win32 GUI Installer」をダウンロードするには
    1. http://ruby-gnome2.sourceforge.jp/hiki.cgi? の「Download」をクリック
    2. ruby-gnome の最新リリースには Windows Installer が用意されていないので
    3. 「ruby-gnome2」をクリックして「ruby-gnome2-0.16.0」をクリックし、
  2. インストールされるファイルに msgmerge が含まれているので PATH に追加。

(C:\Program Files\ruby-1.8 ディレクトリ以下にファイル・フォルダが追加されるかたちでインストールされる。⇒ C:\Program Files 以下に専用のフォルダを作ってインストールされる訳ではない)

  • PATH に追加するパス

C:\Program Files\ruby-1.8\lib\GTK\bin

Mac

Mac の場合は Locomotive を入れるそうです。

Ruby-GetTextで`msgmerge' may not be found. - kurusaki note

lang/rails.txt · 最終更新: 2016/01/27 09:47 (外部編集)