2013年1月26日土曜日

railsパス

railsの命名規則に沿っているうちは問題はありません。(コントローラ名:複数系、ビューディレクトリ:複数系 モデル:単数形 テーブル名は複数)
これらから外れた場合、いろいろ自動で作ってくれているパスが作ってくれなくなります。
そんなときはURLを手動で入れてはどうでしょうか?(コードが増えるので、あまりお勧めは出来ません。。)
<%= form_for(@cat1,:url => "/cat",:html =>{:method => :post}) do |f| %>
通常は以下のような感じ
<%= form_for(@cat1) do |f| %>
パス設定について、いろんな方法 一番目:通常の方法。二番目:ダイレクト 三番目:url_forで作る 四番目:url_for配列版 (注意:authorはモデルのオブジェクトです)
    <%= link_to 'Edit', edit_author_path(author) %>
<%= link_to 'Edit', "/authors/#{author.id}/edit" %>
<%= link_to 'Edit', url_for(:action => :edit ,:id => author.id) %>
<%= link_to 'Edit', url_for([:edit,author]) %>
とにかく命名規則に従った方がコードが少なくなり、楽です。だだ、テーブル名だけはテーブル名をセットする事しても特には問題は発生しません
class Cats < ActiveRecord::Base
  table_name = 'cats'
end
"undefined local variable or method `cats_index_path'"等のエラーが発生する場合はヘルパーにこの関数を追加するのも手です
  def cats_index_path data
    return "/cats"
  end

寒い。葛城山の上は-3度

今日も葛城山粉河コースを登ってきました。山頂の気温は-3度。さすがにこれくらいの寒さになると水が湧き出ているところなどは凍っていました。ただ、先週はハイランドパークまでしかのぼれなかったのに比べると道の状態は完璧です。
これくらいの寒さになると登ってくる人も少ないです。岸和田ツーリングクラブの記帳の今日のリストは私が二番目でした(午前11時時点)
ここまで寒くても、山頂に到着したら汗をかいています。(冬はいつも山頂でアンダーを着替えて降ります)






2013年1月20日日曜日

rails3 複数レコード修正

rails3で複数レコード修正は少しコードを書くと問題無く出来るですが、検証機能を使った後の赤枠(デフォルト)が出なく、困っていました。いろいろ試して出来たので、メモとして残しておきます。
エラー内容とエラー箇所が赤枠で表示されています。


books_controller.rb
  def editall
    @book = Book.all
  end
  def updates
    @book = Book.update(params[:book].keys,params[:book].values)
    @isError = false
    @book.each{|book| @isError = true if book.errors.any?}

    respond_to do |format|
      if @isError == true
          format.html { render action: "editall" }
          format.json { render json: @book.errors, status: :unprocessable_entity }
      else
          format.html { redirect_to :action=>:index, notice: 'Book was successfully updated.' }
          format.json { head :no_content }
      end
    end
  end

ポイント:updateで一気に検証と修正してくれます。検証でエラーが発生している場合はupdateはされません。 eitall.html.erb

Editing book

<% if @isError == true then %>

<%#= pluralize(book.errors.count, "error") %> prohibited this book from being saved:

    <% @book.each_with_index{|book,i| %> <% if book.errors.any? %> <% book.errors.full_messages.each do |msg| %>
  • <%= "#{i+1}line: #{msg}" %>
  • <% end %> <% end %> <% } %>
<% end %> <%= form_tag :action => :updates do %> <% @book.each_with_index{|book,i| %> <%= fields_for("book[]",book) {|f| %> <% } %> <% } %>
<%= f.text_field :title %> <%= f.text_field :price %> <%= f.text_field :content %>
<%= submit_tag "送信" %> <% end %>
どうもコードが正しく表示されないので、Githubのリンクを張っておきますので、そこの¥app¥view¥book¥editallを参照してください。 ポイントはfields_forの"book[]" とXXXX_fieldの第一引数がモデルのフィールド名と同じにする。そうしないとバリデーションの結果の枠などが表示されない。 送信内容は以下のようになっています
"book"=>{"1"=>{"title"=>"rails", "price"=>"1", "content"=>""}, "2"=>{"title"=>"railsによるWeb", "price"=>"1000", "content"=>""}}
book.rb
class Book < ActiveRecord::Base
    validates(:price,:numericality => {:greater_than => 10})
    validates(:title,:length =>{:within => 1..5})
end
routes.rb
  get  'books/editall'
  post 'books/updates'
  resources :books
ソースコード 

葛城山粉河コースでも登れません

今日葛城山粉河コースから登ってみました。標高600m付近までは特に問題はありませんでした。その後、雪と凍った道で”ハイランドパーク”の看板が見えるところまで自転車を押していきましたが、ロードバイクではそこが限界でした。
今度葛城山に登れるのは2月中旬でしょうか??
標高400m付近通行禁止の看板(このあたりは特に問題無し)

ここから下の画像はハイランドパークの看板付近


何だ。微妙な足跡。








クリート交換

クリート交換しました。ついでにカバーも購入。歩いてみ感じは、若干歩きやすい程度した。

2013年1月14日月曜日

凧揚げ

チビたちと凧揚げに行ってきました。重いビニールを使ったのが原因だと思いますが、そんなに上がりませんでした。風もなく、走り回ってばかりでした。今度は軽いビニールにしよう。





2013年1月13日日曜日

葛城山とチビのマラソン練習

葛城山に登るタイムが落ちていると思ったら体重が正月以降も少し増えていました。お餅の食べ過ぎ???
今日はログを取りました。これが葛城山粉河コースです(一番下を参照してください)。
山の上は少し暖かくなったのかも知れませんが、凍っているところはありませんでした。





帰ってきてからチビ二人とチビマラソンの練習




2013年1月12日土曜日

モデルが存在しないバリデーション(rails)

以前にここ(http://tanienjoylife.blogspot.jp/2012/08/rails-3.html)で紹介しましたが、結構使うので、GitHubにコードをアップしました
バリデーションをするときは必ずモデルを作った方が良いですね。


モデルはあるがフィールドが無い項目にたいしてはアクセッサーを追加で対応出来ます。



以下がモデルに対してname2を追加したところ
#coding : utf-8
class Author < ActiveRecord::Base
  validates_length_of :name,:maximum => 2
  validates_length_of :name2,:maximum => 2
 
  attr_accessor :name2
end


2013年1月9日水曜日

javascriptからの日本語を含むURI

javascriptからの日本語を含むURIを送信するばあいは、encodeURIを使えば正しく変換してくれます。情報源

2013年1月5日土曜日

魔法

クラス名の文字列からクラスを取得(http://tnakamura.hatenablog.com/entry/20120607/const_get)
ここまでくると魔法ですね。

def
# coding: utf-8

class Hello
  def greet(name)
     puts "Hello, #{name}."
  end
end

# const_get でクラスを取得できる
hello = Module.const_get("Hello")
h = hello.new
h.greet "ta-ni-"

active recordでselect文

active recordでselect文が使える事を最近知りました。以下のような感じ。ここまでくると直接SQL文を書いた方がわかりやすい。
    @shops = Shop.
        joins("left join books as bo on book_id = bo.id").
        joins("left join authors as au on bo.author_id = au.id").
        where("au.name = 'ta-ni-'").
        select("shops.*,bo.name as bname,au.name as aname")
直接の一歩手前
@shops = Shop.find_by_sql("select shops.*,bo.name as bname,au.name as aname from shops left join books as bo on book_id = bo.id left join authors as au on bo.author_id = au.id where au.name = 'ta-ni-'")

通常の方法とfind_by_sqlの方法ではselect文で関連クラスのフィールドも指定しているので、Shopクラスではない項目も取得する事が出来ます。@shop.bname,@shop.aname(p表示ではShopクラスの項目しか表示されないので、直接は読み取れないのだと思っていました。)

 直接(ここまでくるとactiverecordの恩恵は得る事が出来ません)
 @shops2 = ActiveRecord::Base.connection.execute("select shops.*,bo.name as bname,au.name as aname from shops left join books as bo on book_id = bo.id left join authors as au on bo.author_id = au.id where au.name = 'ta-ni-'")
DBが変わるかもしれない事を考えると最初の方法や二番目の方法(find_by_sql)も微妙ですが、activerecordの便利さの恩恵を受けれます。さらに最初の方法はパーツ毎に別れているので、修正がしやすい。 私は出来るだけ最初の方法を採用しようと思っています。

2013年1月4日金曜日

今年二回目の葛城山と現状の数値

寒い中、葛城山に行ってきました。登る前にマックで休憩。コーヒーの無料券を貰いました。
頂上付近。画像では見えませんが、雪がちらほら


今回は現状の数値データを確認しておこうと思います。(半年後の変化の確認の為)
葛城山粉河コース
 タイム:1時間13分(遅すぎ。多分、お餅の食べ過ぎによる体重増加だのため?)
 平均速度:9.7km/h
   平均心拍数:161(160をターゲットにしていたので、いい感じ)
   最大心拍数:187
 平均ケイデンス:50
   消費カロリー:631kcal(心拍数からサイクルコンピュータが表示している簡易的なもの)
 






次は体重
  体重:70.4kg(やはり通常より2kg以上太っています)
  体脂肪:15.3
      骨量:3.1kg
      筋肉量:56.5kg
     内蔵脂肪:9.5レベル
  基礎代謝:1642kcal/日
  体内年齢:34
          去年の一月の状態が以下です。殆ど同じです
        体重:70.4kg
          BMI:23.5
          体脂肪:16.6パーセント
          筋肉:56.2kg
          骨量:3.1kg
          内蔵脂肪:10.0レベル
          基礎代謝:1634kcal/日
          体内年齢:34




感想:
 やはりこれだけ体重が増えているとタイムも駄目だ。。正月があけると2kgぐらいは落ちるとは思いますが。。

 消費カロリーは登りだけで631kcal.行き帰りの二時間で大体600kcal。一回葛城山に登ると約1200kcal消費します。(帰ったらお腹が空くのは当たり前か。三葛城山するとかなりお腹が空きます。三葛城山した場合はの消費カロリーは2400kcal..多分ここまではあがりません。理由は多分心拍数は3時間も心拍数を160付近をキープするのは難しい。)

 最大心拍数は注意しないと200ぐらいは超えそうです。私の年齢では最大心拍数は170〜180あたりみたいです。
 私の場合、平地を自転車で30km/hで走ると300kcal/h 消費するみたいです。







2013年1月3日木曜日

今年最初のツーリング

毎年恒例の水間観音ツーリングに行ってきました。正月で増えた体重には少しの坂でもこたえました。コースはこれ(http://yahoo.jp/J4Dzvr)私は途中参加です。
殆ど全開に近い走りばかりだったので、良い運動が出来ました。(ツーリングに参加した人の中には、ツーリングの後10kmマラソンをする強者もいました。信じられません。)
4年ほど連続で1/3に水間観音に来ていますが、だんだん人が多くなってきているような気がします。確か最初の年は本堂の前まで自転車で入れたと思います。







帰りにいつも寄るチャンポン屋さん(チャンポン政勝軒)

ノーマルチャンポン ¥750

ホルモンチャンポン ¥950

2013年1月2日水曜日

初詣と葛城山

今日は朝から大人一人、チビ3人を起こして、山崎神社と大宮神社に家族で初詣に行ってきました。勿論家族全員で車に乗れないので、私は自転車でその他は車です。
山崎神社

その後急いで葛城山に登ってきました。登ってみると15時の一時間の間にも葛城山に登った強者が私以外に二人もいました。15時までの情報はなくなっていたので、想像ですが、20人ぐらいは一日に登っているのではないでしょうか?



山頂の回りの風景(雪はありませんでした)

一度の行った事がない葛城神社に行ってきました。


今年の目標
*大台ケ原ヒルクラムで1時間50分を切るタイムを出す。(去年も同じ目標だったのですが、全くでした)
  サブ目標:4月ぐらまで3葛/月(それ以降になるとハブとかがでるので、場所を変更します)
*多くの人に喜んでもらえるソフトのリリース
  サブ目標:有効なサンプル、ライブラリを3本公開