- Tips
- ActiveRecord::BaseオブジェクトからURLへのクエリーのための属性のハッシュを取得する方法
- cygwinでユーザ名に日本語を使うと、プログラムのインストールなどに支障が出る。
- cygwin/mysql の環境では、config/database.yml での host の指定を、LOCALHOST と大文字にしておく必要がある。
- DreamWeaverでeruby用の拡張
- text_field_with_auto_completeの使い方
- 変数の各種変換(参照:http://d.hatena.ne.jp/motoyasu_yamada/20070214 )
- テーブル作成時に、created_at,updated_at,create_by,updated_byを自動で追加する
- remote_functionにtext_fieldの値を渡す方法
- SQL文の直接実行方法
- 実行環境の選択
- ActiveRecordにて、値の変更を制御するメソッド
- AciveRecordのupdateにて、変更のないカラムを除外する設定
- ActiveRecordで集計処理を行いたい場合
- データベースの内容をYMLファイルに変換
- ActiveRecordの各種コールバック関数の呼び出し順
- 時間のかかっている処理トップテンを探す
- ActiveRecordで抽象クラスを定義する
- ActiveRecordで規約に沿わないテーブルとつなげる
Hash[*Hoge.column_names.map{|key|["hoge[#{key}, hoge.send(key)]"].flatten}]
link_toなどで使い場合は以下のように
link_to("next", {:controller => :hoges, :action => :list}.merge(ここに上記のハッシュ))
変数の各種変換(参照:http://d.hatena.ne.jp/motoyasu_yamada/20070214 ) ![](https://static.seesaawiki.jp/img/usr_second/common/icon_pen.gif)
単数<->複数の変換ルールはactivesupport/lib/active_support/inflector.rbにて定義されている。
コマンド | 概要 | 例 |
---|---|---|
pluralize | 単語を複数形にする | "person".pluralize #=> "people" |
singularize | 複数形を単数形にする | "people".singularize #=> "person" |
camelize | キャメル表記にする | "camel_case".camelize #=> "CamelCase" |
titleize | アンダースコア・空白を除去し、全単語の頭を大文字にする | "title_string".titleize #=> "Title String" |
underscore | キャメル表記をアンダースコア表記に | "UnderScore".underscore #=> "UnderScore" |
dasherize | アンダースコアをハイフンに | "hoge_hoge".dasherize #=> "hoge-hoge" |
humanize | 文章っぽい表記に。 | "employee_salary".humanize #=> "Employee salary" "author_id".humanize #=> "Author" |
demodulize | JavaでいうFQDNをクラス名に | "ActiveRecord::CoreExtensions::String::Inflections".demodulize # => "Inflections" |
classify | テーブル名からクラス名を(singularize&camelize) | "tests".classify #=> "Test" |
tableize | クラス名からテーブル名を(underscore&pluralize) | "Test".tableize #=> "tests" |
foreign_key | 外部キー名に | "Message".foreign_key #=> "message_id" |
ordinalize | 数値を順表記にする | 1.ordinalize #=> "1st" |
constantize | 文字列から定数を作成する。Module.const_get(string)と同じ。 | "Foo".constantize #=> class Foo |
以下のコードをconfig/environment.rbに追加。
module ActiveRecord module ConnectionAdapters module SchemaStatements def create_table_with_datetime_columns(*args) create_table_without_datetime_columns(*args) do |t| yield t # ブロック呼んだ後でシステムカラムの追加 t.datetime_columns t.editor_columns end end alias_method :create_table_without_datetime_columns, :create_table # create_table を置き換えたくない場合は次の行をコメントアウト alias_method :create_table, :create_table_with_datetime_columns end class TableDefinition # 新しいメソッドを追加 def datetime_columns column "created_at", :timestamp column "updated_at", :timestamp end def editor_columns column "created_by", :integer column "updated_by", :integer end end end end
<input type="text" name="textfield" id="textfield" onchange="<%= remote_function(:update => "target", :url => {:action => :update_target}, :with => "'param='+ escape(value)") %>">この:withで指定した文字列はjavascriptとして評価されるので、escape(value)とすることで呼び出しもとのtext_fieldの値this.valueが渡される。
ActiveRecord::Base.connection.execute([SQL文])
クエリの内容に応じて以下の方法を使うと、戻り値として影響のあった件数を取得できる
ActiveRecord::Base.connection.update([SQL文]) ActiveRecord::Base.connection.insert([SQL文]) ActiveRecord::Base.connection.delete([SQL文])
$ ruby ./script/server -e production $ ruby ./script/console production $ rake db:migrate RAILS_ENV=production
changed? | モデルの値を変更したか否か |
[カラム名]_changed? | モデルの指定したカラム名の値を変更したか否か |
[カラム名]_was | モデルの指定したカラム名の変更前の値 |
[カラム名]_change | モデルの指定したカラム名の変更前と後の値のリスト。変更が内場合はnil |
changed | モデルの変更したカラム名のリスト |
changes | モデルの変更したカラム名をキーとする変更前と後の値のリスト {"key1" => ["before", "after"], "key2" => [1,2]} |
[カラム名]_will_change! | =以外のメソッドでカラム名の値を変更した場合に、変更を宣言する |
ActiveRecord::Calculationsというモジュールを対象のModelクラスにミックスインする
以下の関数が利用可能
class Foo < ActiveRecord::Base include ActiveRecord::Calculations end
以下の関数が利用可能
average | 平均値を求める |
count | カウント |
maximum | 最大値 |
minimum | 最小値 |
sum | 集計値 |
Foo.sum("bar") #=> カラムbarの合計
Foo.count(:conditions => ["created_at >= ?", Time.now.last_month]) #=> 過去一ヶ月に作成されたデータの件数
- before_validation
- before_validation_on_create
- # ここで validation が行われる
- after_validation
- after_validate_on_create
- before_save
- before_create
- # ここで DB に挿入される
- after_save
- after_create
- before_validation
- before_validation_on_update
- # ここで validation が行われる
- after_validation
- after_validate_on_update
- before_save
- before_update
- # ここで DB が更新される
- after_save
- after_update
このページへのコメント
rmpEco Im grateful for the blog article.Thanks Again. Will read on...
ssVNTD Very neat blog post.Really looking forward to read more. Much obliged.
8LTq6m Thanks for the article post.Much thanks again. Great.
EeaMn3 <a href="http://qipbxhqdmvuk.com/">qipbxhqdmvuk</a>, [url=http://dixknhvmstjq.com/]dixknhvmstjq[/url], [link=http://clvepimxmlfz.com/]clvepimxmlfz[/link], http://lwczdqpoyehe.com/
9rGIl1 <a href="http://avolvrxnrjef.com/">avolvrxnrjef</a>, [url=http://tyjscupqhmgj.com/]tyjscupqhmgj[/url], [link=http://cstqutfvulzv.com/]cstqutfvulzv[/link], http://cqhcnrnqpkje.com/