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

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

今回のハマりはARのacts_as_listです。
今までARにacts_as_listなんて便利なものがあるのをすっかり忘れていて、
車輪の再発明しまくりだったわけですが、
改めてアジャイル本をめくっていて、こんなのがあるのに気づき、
あ~、トホホ、という感じでこれを使うことに。

今までは、表示順を:display_orderでやってたので、
テーブル設定を変えたくないのでそのままのオーダーでacts_as_listでやろうと。

普通に実装するときは、表示順を表すカラムをpositionにしてあげれば、
後はARが勝手にやってくれる。

違うカラムを指定したいときは、:columnオプションでシンボル指定してやってください。

こんな感じ


has_many :childlen, :order=>:oreore_position


belongs_to :parent
acts_as_list :scope=>:parent_id, :column=>:oreore_position

これで、oreore_positionをキーに整列してくれる。

#2.0からオプション扱いになって、本家ドキュメントに載ってないよ~。

PR
あ~やられてしまった。

う~

前に書いたエントリで、
パラメータを配列のハッシュだとか、
ハッシュのハッシュだとか、
ハッシュの配列だとかに入れられると書いたんだけど、
これが、2段以上のハッシュに対応していないことが判明。

こんな感じで送る

<%= hidden_field_tag 'hoge[]fuga][piyo]', value1 %>
<%= hidden_field_tag 'hoge[]fuga][piyo]', value2 %>
これを期待
params[:hoge]  -> [{:fuga=>{:piyo=>value1}}, :fuga=>{:piyo=>value2}}]
結果
params[:hoge] -. [:fuga=>{}, :fuga=>{}]

あ~、なんかいい知恵は無いものか。

あ~、やっちゃいましたよ。

link_to の:popupオプションです。

自分で、:popupオプションの記事を書いておいて、
それを参考して使ったらちっともポップアップしない。

ひどいもんです。

あのとき、こう書いた。読みやすいと思って。
<%= link_to 'hoge',
            :action=>hoge,
            :popup=>['new_window',
                        'width=500,
                         height=300,
                         menubar=no,
                         toolbar=no,
                         location=no,
                         scrollbars=yes,
                         resizable=yes'] %>
そこに大きなハマりポイントが!

:popupオブションの中身は改行したらいけません。
絶対ダメです。

ポップアップしなくなります。

あ~。これで30分無駄に・・・
以前のエントリで書いたけど、
select_datetimeで取得した日時のオブジェクト化。

いろいろ見てみたけど、どこでも同じ方法を採っているみたい。

こんな感じ
view
<%= select_dateitme Time.now %>

contoller
time = Time.local(params[:date][:year].to_i,
                                params[:date][:month].to_i,
                                params[:date][:day].to_i,
                                params[:date][:hour].to_i,
                                params[:date][:minute].to_i,
                                params[:date][:second].to_i)
これはあまりにスマートじゃない。

で、結局ヘルパを使いました。

def param_to_time(param)
  Time.local(param[:year].to_i,
                      param[:month].to_i,
                      param[:day].to_i,
                      param[:hour].to_i,
                      param[:minute].to_i,
                      param[:second].to_i)
end
例外処理を忘れずに。

やり方は簡単、

ActiveRecord::Base.connection.execute(SQL)
で出来る。

で、ハマりどころは、ActiveRecord::Baseのクラスメソッドを直接呼ぶこと。

generate modelで作成したActiveRecord::Baseのサブクラスでこれをやると大変なことに。

class Hoge < ActiveRecrod::Base
end

Hoge.connection.execute(SQL)

とやってみると、処理はすぐに帰ってくるけれども、
状況によってはサーバーが止まる。

一寸調べてわからなかったのであきらめたけど、どうもDBとのコネクションを解放していないらしい。

DBの中身を見ると、サーバーが止まっているにもかかわらず、SQLは実行されているみたいだった。

謎だあ。
前のページ      次のページ
ついめ~じ
ブログ内検索
フリーエリア
サニーカメラ
Powered by Ninja Blog    template by Temp* factory    icon by MiniaureType

忍者ブログ [PR]