フィールドを監視してselectの値を動的に変える(observe_field)

こんにちわ〜
今回はobserve_fieldを使用してselectフィールドの値を変化させる方法について書いてゆきますかね。

まずはviewでこんな感じにobserve_fieldを使う

view
  <%= select_tag :select_data,options_for_select(@category_options)  %>
   <%= observe_field(:select_data,               #監視するフィールド
      :frequency => 0.25,
      :update => :change_field,   #更新するフィールド
      :with => "select_value",    #params[:select_value]に値が入る
      :url => { :action => :live_search }) %> #呼び出すアクション
   <%= select_tag :change_field,options_for_select(@subcategory_options)  %> #更新対象のフィールド

次にlive_searchアクションでparams[:select_value]から値を取得。
適当に加工してlive_searchビューに渡す!ここでは@subcategory_optionsを渡すことにしましたよっと。


live_search.rhtml

  <%= options_for_select(@subcategory_options)  %>

これでいけます。





ちなみにform_forの場合

 <% form_for :article,@article,:url =>{:action => 'articles_create'},:html => {:multipart => true }  do |form| %>
            
   カテゴリ<%= form.select :select_data,@options %>
   <%= observe_field("article_select_data",
      :update => "article_change_field",
      :with => "option_value",
      :url => { :action => :live_search }) %>
   サブカテゴリ<%= form.select :change_field,@suboptions %>

 

こんな風なフィールド名の指定をしないとだめ。

mongrelでRailsやってみます

webrickより軽いmongrelとかいうサーバがあるとの情報を得た。
mongrelがなんで軽いかというと


「動作速度に関わる余分なモジュールや機能が省かれて設計されており、単体での動作速度が非常に早い。」


からだそう。
というわけでやってみます。



まずインストール

  gem install mongrel

次に、fastthreadも一緒にインストールする必要があるらしいのでする。これはarrayの高速化とか、バグパッチとかが入っているらしい、らしい。(いらないとかいう情報もあった)

  gem install fastthread

  nmake
  'nmake' は、内部コマンドまたは外部コマンド、
  操作可能なプログラムまたはバッチ ファイルとして認識されていません。

あれ
nmakeがないだって?

gem update --system

これでfastthreadいけましたー
インストール完了です。


じゃあ起動。まずrailsのrootディレクトリに移って

>>mongrel_rails start
** Starting Mongrel listening at 0.0.0.0:3000
** Starting Rails with development environment...
   ・ 
   ・
   ・

おお、いけた

というわけで早速サイトを悦乱してみると。。。



おおーー早い


早くなりました。


というわけでmongrelを使ってみましたが、確かに早くなります。ビュン
いろいろ省かれてる分問題もあるらしいです。 => えとブログ(2006-01-30)
あとそのままでmongrel使うと単一プロセスしか走らないらしいので
実際にWebサービスとして使うならApacheとかと連携するのがいいみたい。


参考サイト
http://it.kndb.jp/entry/show/id/87 

ありがとうございます。

式 ||= と &&

tnさんに教えてもらったことのメモ。

 value ||= a   #valueがnilならaを代入

とても便利。tnさんありがとうございます。


あと

  current_client_user ||= (session[:client_user] && ClientUser.find_by_id(session[:client_user])) || :false

これの&&の意味がよくわからなかったので調べたところ


・まず左辺を評価して、結果が真であった場合には右辺も評価する。
論理積論理和はtrue、falseをかえすのではなく、オペランドのいずれかを返す。


ということらしい。
真偽値ではなくて値を返すんですね。
勉強になりました。