2011-12-19

railsでconfirm画面を表示する

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク
今どきなシステムだと、あんまり確認画面って感じではないとは思うのですが、
登録前に確認画面を出して欲しい
と言われることが、まぁあります。

railsでconfirm画面を表示する方法はいろいろあるようなのですが、
とりあえず以下のようにしてみました。
使うアクションとviewは一つずつにしてみています。
まずはコントローラーは以下のような感じです。
class AaaController < ApplicationController

  def aaa
    #最初の表示
    unless params[:commit]
      params.delete(:confirm)
      return
    end
    #postされたら、まずはvalidateする
    @err = Hash.new
    @err[:val] = 1 if params[:val].blank?
    #validateでエラーがあったら返す
    unless @err.size == 0
      flash.now[:error] = "validate error"
      return
    end
    #確認画面表示
    unless params[:confirm]
      params[:confirm] = 'confirm'
      return
    end
    #確認後の登録処理をこれ以降に書く
    params.delete(:confirm)
    flash[:notice] = "登録したよ[#{params[:val]}]"
  end

end

そしてviewは以下のような感じです。
<% if params[:confirm] %>
  <h1>確認</h1>
<% else %>
  <h1>登録</h1>
<% end %>
<%= form_tag(:action => "aaa") %>
  <%= label_tag(:val, "val") %>:
  <% if params[:confirm] %>
    <%= params[:val] %>
    <%= hidden_field_tag :val,params[:val] %>
  <% else %>
    <%= text_field_tag("val",params[:val]) %>
  <% end %>
  <br />
  <p class="form-footer">
  <% if params[:confirm] %>
    <%= hidden_field_tag :confirm %>
    <%= submit_tag '作成', :class => "submit" %>
    <%= submit_tag 'キャンセル', :name => "cancel" ,:class => "submit" %>
  <% else %>
    <%= submit_tag '確認', :class => "submit" %>
  <% end %>
  </p>
</form>

通常入力用と確認用のテンプレートを用意するのでもよいと思います。

実際に表示させると以下のような感じです。

validateで失敗すると以下のような感じ。

以下のようにちゃんと入力して「登録」をクリックすると

以下のような確認画面になります。

「キャンセル」をクリックすると確認前の画面に戻って、「作成」をクリックすると以下のように登録完了になります。


切削加工機iModela iM-01がキニナルのです

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク
iModela iM-01(切削加工機)
iModela iM-01(切削加工機)
価格:78,750円(税込、送料別)

その気になれば手が出せる値段のiModela iM-01がキニナルのです。
3Dプリンタ(?)と呼ばれるものの一種で3次元のものを作り出すのです。
3Dプリンタ(?)だけど、これは削って加工するもののようです。

実物を一度見たのですが、思ったよりも小さいです。
欲しいけど、衝動で買ったら邪魔になるサイズかも・・・・
とか思ったけど、コレくらいのサイズならありかもとか思ったりしました。

詳しくは以下
http://www.rolanddg.co.jp/news/2011nr1005_imodela.html

同じ会社が出している金属に模様を彫るメタルプリンターというものもキニナルのですが、こちらはお値段お高めなので買えません。

2011-12-17

railsでselect_tagで事前に選んだ項目でselectedさせる

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク
railsでselectボックスを利用している場合で
validateとかに失敗して、画面を再表示させたいときに、
事前に選択していた項目をselectedにしたい場合です。

こうしてみました。

<%= select_tag(“aaa”, options_for_select([['あああ',1],['いいい',2],['ううう',3]], params['aaa'] )) %>

でも、前回選んでおいたものがselectedにならなかったのです。


<%= select_tag(“aaa”, options_for_select([['あああ',1],['いいい',2],['ううう',3]], params['aaa'].to_i )) %>


こうする必要がありました。

ちゃんちゃん。

2011-12-15

rubyで和暦を使いたいとき

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク
あまり和暦は使いたくないのですが、どうしても使わないといけないこともあります。

まずは和暦を読み取るときです。
H23.12.15
のような形式であれば、

require 'date'  
d = Date.parse("H23.12.15")
puts d.to_s #2011-12-15  
という感じで読み取ることができます。

平成とか漢字とかも使いたい場合は、
http://d.hatena.ne.jp/glpgsinc/20110502/1304332167
を参考にするのがよいかなぁと思います。


逆に、和暦出力したい場合は、
http://fistfvck.sakura.ne.jp/w/ruby/reverserecipe/048_%E6%97%A5%E6%99%82%E3%82%92%E5%92%8C%E6%9A%A6%E8%A1%A8%E8%A8%98%E3%81%A7%E5%87%BA%E5%8A%9B%E3%81%97%E3%81%9F%E3%81%84
で紹介されている手段を使うのがよいかなぁと思います。

wget http://svn.coderepos.org/share/platform/tdiary/plugin/jyear.rb
でtdiaryで使っているjyearというのを取得して使う感じです。
これで%Kという和暦用の変換コードが使えるようになります。
こんな感じです。

t = Time.now
t.strftime("%Y-%m-%d")      # "2009-07-23"
t.strftime("%K年%m月%d日")  # "平成23年12月15日"
これで西暦と和暦の相互変換ができる感じです。

2011-12-14

バーコードからtwitできるBARCOTTERをバージョンアップしました

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク
バーコードを読み取って、本のタイトルなどを判別してtwitができるBARCOTTERをバージョンアップしました。

BARCOTTERに関して詳しいことは、
http://kingyo-bachi.blogspot.com/2011/11/barcotter.html
をご覧ください。

バージョンアップ内容としては、バグフィックスです。

たまに
java.lang.IllegalArgumentException: View not attached to window manager
という感じのエラーが発生していたのですが、
どうもProgressDialogが表示されている最中に画面を回転させると出るようです。

対処としては、ProgressDialogを利用するのをやめました。
ProgressDialogを利用したかったのは、バーコード読取後にそれが何かを通信して確認しているのですが、その間に他の作業をしてもらいたくないなぁということでした。
BARCOTTERには、そんなにボタンがないのですべてのボタンを通信中は利用不可にすることでProgressDialogと同じように通信中に作業できない感じにしてみました。

他の変更点として、AmazonアソシエイトIDを設定できるようにしてみました。

今回、修正の際にAndroidでの非同期処理には、AsyncTaskというのがあるということを知ったのでこれを使うようにもしてみました。
今までは、
http://magpad.jugem.jp/?eid=109
で紹介されているような方法でやっていたりしました。
置き換えは、
Runnable
に書いていたことを
doInBackground
に移して
Handler
に書いていたことを
onPostExecute
に移した感じです。


追記 2011/12/24
上記変更で落ちることはなくなったのですが、画面を回転させるとdisableにしたはずのボタンがenableになってしまう状態でした。
以下のサイトで紹介されていた
http://d.hatena.ne.jp/hyoromo/20090712/1247385249
AndroidManifest.xml ファイルに android:configChanges 属性を追記すると問題なくなりました。
紹介されているように
 orientation|keyboardHidden
と設定するとよい感じでした。
keyboardHidden
があった方がよさげな動作をしました。理由はよくわからないのですけどね。

2011-12-01

WBS「トレたま」で放送された商品をAmazonで検索してみた(201111放送分)

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク
WBSのコーナーの「トレたま」で放送された商品をAmazonで検索してみました。

1台で3役こなす! (放送:11月30日)
見つかりませんでした

フラッシュ☆カバー (放送:11月29日)
見つかりませんでした

自転車でエコ充電♪ (放送:11月28日)
見つかりませんでした

余白手帳 (放送:11月24日)
amazonにありました


指圧力センサー (放送:11月23日)
見つかりませんでした

卓上会議システム (放送:11月22日)
見つかりませんでした

世界初 音声リモコン (放送:11月21日)
amazonにありました


帯電でミスト (放送:11月18日)
見つかりませんでした

スマホでカラオケ (放送:11月17日)
見つかりませんでした

新感覚電子楽器 (放送:11月16日)
見つかりませんでした

おしゃれな段ボール椅子 (放送:11月15日)
見つかりませんでした

水電池懐中電灯 (放送:11月14日)
見つかりませんでした

寝相“改善”枕 (放送:11月11日)
見つかりませんでした

家庭用野菜洗浄機 (放送:11月10日)
見つかりませんでした

電子書籍を“出版” (放送:11月9日)
見つかりませんでした

盲導犬型ロボット (放送:11月8日)
見つかりませんでした

“粘着”名刺入れ (放送:11月7日)
見つかりませんでした

頭脳を持ったシューズ! (放送:11月4日)
見つかりませんでした

赤外線で見守る! (放送:11月3日)
見つかりませんでした

超小型電話! (放送:11月2日)
見つかりませんでした

次世代オフィス! (放送:11月1日)
見つかりませんでした