忍者ブログ
ブログツール、2007/11/06作成
[2] [3] [4] [5] [6] [7] [8
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

file_fieldを使用してファイルアップロードなりをするときの注意点。

まず、ブランクチェックを行っておくこと。
ブランクチェックは、
params[:upload_file].blank?
でやるのが吉。

もしくは、params[:upload_file].size == 0
とか。

そのほか、params[:upload_file]に格納されるデータの型がデータ量によって異なることが注意。
10KB以下だとStringIOクラス、それ以上だとTempfileクラスになる。

処理によってはデータサイズ別に振る舞いを分ける必要がありそう。
PR
忘れちゃうのでメモ

関連テーブルなんかだと、関連先IDをDBインデックスに指定するのは常套手段。

migrationファイルで、インデックスを追加するのはいいんだけど、
クラス名と関連クラス名が長いと
name '......' to long
でエラーがかえってきちゃう。

そんなときは、:nameオプションで指定するべし。

こんな感じ
add_index :nandaka_sugoku_nagai_class_names,
          :aitemo_sugoku_nagai_class_name_dane_id, 
          :name=>'short_index'
よく使うオプションのメモ。

width ウィンドウの幅。数値で指定。
height ウィンドウの高さ。数値で指定。
left ウィンドウの左位置。数値で指定。
top ウィンドウの上位置。数値で指定。
menubar メニューバーを表示するか否か。yesかnoで指定。
toolbar ツールバーを表示するか否か。yesかnoで指定。
location アドレスバーを表示するか否か。yesかnoで指定。
status ステータスバーを表示するか否か。yesかnoで指定。
scrollbars スクロールバーを表示するか否か。yesかnoで指定。
resizable リサイズ可能か否か。yesかnoで指定。

オプションは:popupオプションに食わせる配列の2番目にカンマ区切りした一連のテキストで入れる。

こんな感じ

<%= link_to 'hoge',
            :action=>hoge,
            :popup=>['new_window',
                        'width=500,
                         height=300,
                         menubar=no,
                         toolbar=no,
                         location=no,
                         scrollbars=yes,
                         resizable=yes'] %>
パラメータに配列やハッシュを使う方法は前に書いたけど、
応用編でもう一つ。

ちょっと考えればわかるけど、
ハッシュの配列にしたいとき。
<%= hidden_field_tag 'hoge[][:fuga]', value %>
<%= hidden_field_tag 'hoge[][:piyo]', value %>
こんなやつをループで回すだけ。
どこまで出来るかと、ハッシュに欠落があったときのことを考えるとどんなもんかなあ。
あと、'hoge[]'にインデックスを食わせるとどうなるか。

今度ちょっとやってみよう。
よく忘れちゃうのでメモ。

select_tagにオブジェクト配列を食わせて、オブジェクトのname属性を表示して、IDを渡すのは常套手段。
というわけで、select_tagでoptions_for_selectを使うのはよくやるんですが、忘れちゃう。

hogeオブジェクトにidとname属性があったとする。
で、hogeオブジェクトの配列がhoge_arrayとして、

select_tag options_for_select(hoge_array.map{ |hoge| [ hoge.name, hoge.id ] } )

角括弧よく忘れるので注意。
nameが前です。valueは後ろね。

Rails APIドキュメントでは改行がうまくいってなくて読みにくいので抜粋。

Accepts a container (hash, array, enumerable, your type) and returns a string of option tags. Given a container
 where the elements respond to first and last (such as a two-element array), the "lasts" serve as option values and
the "firsts" as option text. Hashes are turned into this form automatically, so the keys become "firsts" and values
 become lasts. If selected is specified, the matching "last" or element will get the selected option-tag. Selected # may also be an array of values to be selected when using a multiple select.

Examples (call, result):
options_for_select([["Dollar", "$"], ["Kroner", "DKK"]])
<option value="$">Dollar</option> <option value="DKK">Kroner</option>

 options_for_select([ "VISA", "MasterCard" ], "MasterCard")
 <option>VISA</option> <option selected="selected">MasterCard</option>

 options_for_select({ "Basic" => "$20", "Plus" => "$40" }, "$40")
<option value="$20">Basic</option> <option value="$40" selected="selected">Plus</option>

options_for_select([ "VISA", "MasterCard", "Discover" ], ["VISA", "Discover"])
<option selected="selected">VISA</option> <option>MasterCard</option> <option selected="selected">Discover</option>

NOTE: Only the option tags are returned, you have to wrap this call in a regular HTML select tag.
ついめ~じ
ブログ内検索
フリーエリア
サニーカメラ
Powered by Ninja Blog    template by Temp* factory    icon by MiniaureType

忍者ブログ [PR]