目次

参考文献

ActiveRecord?

「find」と「find_by_*」の戻り値

見つからなかった時の戻り値

「find」 :: RecordNotFound? を返す

「find_by_all」 :: 上記と同じようにRecordNotFound?を返す??

「find_by_*」 :: nil を返す

http://d.hatena.ne.jp/naoty_k/20110708/1310096905

find

models =
 SomeModel.find(:all,
           :select => "distinct field_name",
           :limit => 5, 
           :order => "created_at desc", 
           :conditions => ["user_id = ?", user.id])

条件に一致する最初の一行のみ取得

モデル名 :: モデル内のクラス名?

value :: 文字列の場合は「"」で囲む

@record = モデル名.find_by_*(value)

戻り値

@record[column]

Array
(
    カラム名1 => value1
    カラム名2 => value2
    カラム名3 => value3
    ・
    ・
    ・
)

条件に一致する行を全て取得する

@record = モデル名.find_all_by_*(value1, value2, ...)

戻り値

@record[num][column]

Array
(
    // 一行目
    [0] => Array
        (
            カラム名1 => value1
            カラム名2 => value2
            カラム名3 => value3
            ・
            ・
            ・
        )
    // 二行目
    [1] => Array
        (
            カラム名1 => value1
            カラム名2 => value2
            カラム名3 => value3
            ・
            ・
            ・
        )
    ・
    ・
    ・
)

カラム名と検索条件を指定して取得

  • 一行目のみ取得
モデル名.find_by_カラム名(value)

モデル名.find_by_カラム名1_and_カラム名2(value1, value2)
  • 全行取得
モデル名.find_all_by_カラム名(value)

モデル名.find_all_by_カラム名1_and_カラム名2(value1, value2)

SQL文の実行

モデル名.find_by_sql(value)

戻り値

モデル名.find_all_by_*(value1, value2, ...) と同じ

レコードの削除

条件一致レコードを全て削除

条件は上記を参考に変更すること!

@record = モデル名.find_all_by_*(value1, value2, ...);
モデル名.destroy(@record);

レコードの登録

@regist = モデル名.new(連想配列);
@regist.save;

※ 多重配列は渡すことができないので注意

連想配列
Array
(
    カラム名1 => value1
    カラム名2 => value2
    カラム名3 => value3
    ・
    ・
    ・
)

工夫すれば多重配列でもおk

i = 0;
while i <  @record.length do
    # 登録設定
    @regist = モデル名.new(@record[0]);
    # 登録
    @course.save;
    i += 1;
end

以下の配列が登録する値だとする

@record[num][column]

Array
(
    // 一行目
    [0] => Array
        (
            カラム名1 => value1
            カラム名2 => value2
            カラム名3 => value3
            ・
            ・
            ・
        )
    // 二行目
    [1] => Array
        (
            カラム名1 => value1
            カラム名2 => value2
            カラム名3 => value3
            ・
            ・
            ・
        )
    ・
    ・
    ・
)

Kwartz

注意点

属性で指定してない場合は置き換えできない

埋め込みタグには「READONLY」のように指定せずに属性として指定すること!

 <input type="text" id="mark:week_day2" name="week_day2" value="サンプル" READONLY>

1つタグに複数のID使用できない

「mark:」だとしても2重にIDは使用できない

 <input type="text" id="week_day2" id="mark:week_day2" name="week_day2" value="サンプル">

caseの注意点

<% case @value %>
   <% when "case1" %>
   <% when "case2" %>
<%end%>

1つ目の when は case の行に書く必要がある

<% case @value when "case1" %>
   < %when "case2" %>
<% end %>

メモ

置き換え

最初の文字だけ置き換え

value.sub(/正規表現/, '置換後の文字列')

全て置き換え

value.gsub(/正規表現/, '置換後の文字列')

配列追加

@ary << value

レイアウトを使用しない

コントローラーのアクションに以下を加えるだけでおk

render(:layout => "false")

kwartz

セミコロン「;」がないとエラー吐く

attrs: "class" @value;

データベースから出力

int型とdata型だと

ary.num.to_s

のように文字列にする必要がある?

HTMLエスケープ

「&」「>」「<」「"」 => 「&」「>」「<」「"」

Rails 3 からデフォルトになった

「h」を追加するだけ

<%= h @value %>

Rails 3でHTMLエスケープを無効にする例

<%= raw @value %>

Kwartzの場合は直接記述できないので以下を使えばおk

引数が数字ならば変換する必要あり

CGI.escapeHTML(string)
CGI.escapeHTML(num.to_s)

Rails

表示する場合は文字列

変換する必要がある

num.to_s

独自ルール - 変数名

Kwartz

ロジック

埋め込みタグ

mrk_*

デザイン

送信データ

sd_*

CSSは「タグ」or「class」で定義

Rails

配列

ary_*

数字と日付 ← 配列の一部が数字の場合は?

表示させるには文字列に変換する必要があるため

n_*

HTML

JavaScriptで使用するタグID名

j_*

ルール - その他

print 'aaa';

引数

params[:value] はPOSTとGETを区別しない

文字列として受け取る

画像やファイルのダウンロード

$ send_file(ファイルのパス [, オプション])

参考

content-type一覧

send_file save_dir_path + save_file_name,
  :filename => download_file_name,
  :type => 'application/pdf',
  :disposition => 'inline';

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2016-01-16 (土) 18:03:29 (435d)