2013年05月01日
おーい
なんぞこれって感じで調査。
デバッグしても、通ってるしエラーはないのになんでだろー???
って感じで悩んでると発見!
<% form_for
ってなってました。そう。%=って書かなきゃいかんところが%・・・
てかエラー出しておくれよー。これちょっとしたミスで悩むはめになるじゃん・・・って挫けそうな午前中でした・・・
2013年05月01日
[Rails]formal argument cannot be an instance variable: だってさ
処理
<% } %>
と記述したViewがあります。で、Ruby1.8では問題なかったのに、1.9では
formal argument cannot be an instance variable:
とエラーが発生しちゃいます。しょぼーん。
どうも1.9ではこのままじゃ駄目みたい。
エラーメッセージに従って対処
<% @hoges.each_with_index{|r,idx| @r = r %>
こんな感じに修正したら実行できましたよ。
あーよかった。
2013年04月11日
[Rails]deviseのユーザー編集画面がRoutingErrorになってはまった件
deviseにて認証機能を実装してるんですが、ログインユーザーの情報を編集する為に
<%= link_to "ユーザ情報の編集", edit_user_registration_path(current_user) %>
な感じでリンクを作成したとします。
で、クリックすると
ActionController::RoutingError (No route matches {:controller=>"devise/hoges"})
なエラー。
rake routes でルーティング確認してもedit_user_registration_pathはあるし・・・
stackoverflowとかで検索しても、簡単に解決しそうな回答があるんですが、全然治らんかった・・・。
これはいかんという事で冷静になる。いかなる時もクールアズキュークですな。
まず、/views/layouts/application.html.erbで
<%= render 'shared/header' %>
な感じでアプリケーション全体のヘッダーを呼んでいる。
つーことで今度は
_header.html.erbを確認。
<%= link_to '表示項目',{:controller =>"hogs",:action =>"index"} %>
キター。おかしなところ発見!
なんで、ヘッダーでコントローラーがhoges呼んでるのに、edit_user_registration_pathでedit.erb.htmlを生成する時のヘッダー情報がdevise/hogesと頭にdeviseがついてるんだぁ?
deviseはモデル層だけで成り立ってるので、このあたりがポイントかな。
まぁ、深く考えずにroutesにasでhogeとか名前つけて、<%= link_to '表示項目',hoge_path %>ってやったら、治りましたさ。
解決ー。
って、なんでGoogle先生に聞いてもこの情報ひっかからないの?初歩的すぎる?そんな事ないよね?
自力解決だとやっぱり苦労します・・・。
2013年03月24日
[Rails]dotCloudにデプロイ後We're sorry, but something went wrong.
2013年03月18日
[Ruby]変数をメソッド名とかプロパティに使うよーにするには
例えば
Table.data1.url(:medium)
とやれば、data1の画像のパスがGetできますが、じゃあ、data1〜10まで存在して、ユーザーが指定したurlを取得したい場合、どうするかというと
def aaaa(fieldname)
Table.send(field name).url(:medium)
end
といった感じで出来ます。
早い話が、send(変数名)でその変数をクラス名とかプロパティとして扱えると・・・。
この認識であってるのかな?
ライブラリ内では__send__を利用する方が良いって書いてあるけど、とりあえずはsend()で。
2013年03月18日
[Rails]DeviseのサインアウトでNo route matches [GET] "/users"が発生
No route matches [GET] "/users"
と表示されて、サインアウトが出来なくなりました・・・。
原因は今朝、テストでview/layouts/application.html.erbに記述しといた<%= javascript_include_tag "application" %>をコメントアウトしたのが問題っぽいです。という事でコメントアウトからはずすと、問題なくサインアウト出来ました。
どうやら、javascriptを読み込まないとDeviseの機能は使えないところがあるっぽいです。まあ、普通はこんな事しないと思うのであまり遭遇しないエラーだと思いますが・・・。
2013年03月18日
GoogleReaderの移行先
Webの情報を収集するにあたって、私はGoogleReaderを利用しています。
もう何年の付き合いでしょうか・・・。登録されているフィードの中にはすでに更新されなくなって2年以上たっているものもあります。
そんな長い間、慣れ親しんだGoogleReaderさんに衝撃のニュースが舞い込んできました。
7/1でGoogleReaderのサービスが終了するというのです
こりゃ困ったわいという事で、引っ越し先を探しました。以前にLiveDoorとかも使ってたのもあって、最悪、Livedoorかなぁと思っていたんですが、Feedlyというサービスがいいよっていろいろなブログで書かれていたので、さっそくお試ししてみました。
Googleアカウントでログインし、GoogleReaderと同期を選択すると、そのまま、GoogleReaderの内容が移行されるので、これだけで引っ越し完了です。
さらに見た目がGoogleReaderよりもカッコいい!
さらに素敵なのが、iPhoneやAndroidアプリもあり、それぞれダウンロードしてみましたが、それも使い易い・・・。
現状に甘んじているとより良いものが発見出来ないという教訓をGoogleReaderのサービス停止から受けた気がします。
もっと良いものないかな?もっと良く出来ないかな?という向上心は失わないようにしたいですね。反省。
2013年03月15日
久しぶりに更新します。
静岡県浜松市において、Ruby on RailsをメインにWebサービスを開発しています。
現在、Railsにて2つのサービスを作成中です。
また昨年は、Railsで開発した某医療関係のシステムで浜松市より奨励賞を頂きました。
ここまでの活動で、短期間で効率よくシステムやサービスをリリースしていくには、Railsというのは強力な武器である事を実感しました。 生産性が高いという事はより安価により早くサービスを提供出来るという事です。
システムにはプログラムがつきものです。PHPやjQueryの普及により、敷居は下がったものの、抵抗感があるかもしれません。
Webサービスやシステムを作ってみたい!という方に、安価で適正な金額でシステム部分を作り込める場所が増えれば、まだまだ発展途上のWebにさらに良質なサービスが生まれるかもしれません。
自分自身でWebサービスやアプリケーションを提供していくと共に、プログラムは出来ないがアイデアや夢がある方の助けになりたいと思い、今回、ブログを再開するとともに、屋号も変更する事に致しました。
また、Webだけではなく、企業様向けのWindowsアプリケーションも生産性が非常に高い、C#、Access、FileMakerにて提供も行っていきます。
過剰な機能や不必要なユーザーインターフェースを見直し、さらに生産性の高い言語で開発を行う事により、多くの皆様にITの素晴らしさを感じて頂ければと思います。
よろしくお願いします。
・新屋号はガーネットシステムズとなります。
由来はPerl、Rubyが誕生石から名付けられたのにちなんで、私の誕生月である1月の誕生石のガーネットから名付けました。 Ruby on RailsならGarnetを連想して頂けるように、頑張っていきたいと思います!
2011年11月18日
[SQL]日付範囲同士の検索
会議室予約や、機械や作業状況をある期間で集計したい場合等、しっかり考慮しないといけない。
例えば、ホテルの部屋管理を、以下のように部屋番号、チェックイン日、チェックアウト日というテーブルに管理していたとします。
テーブル:hoge
ID | from_date | to_date |
---|---|---|
1 | 2011/11/15 | 2011/11/17 |
2 | 2011/11/10 | 2011/11/14 |
3 | 2011/11/19 | 2011/11/23 |
4 | 2011/11/10 | 2011/11/23 |
5 | 2011/11/10 | 2011/11/12 |
6 | 2011/11/21 | 2011/11/23 |
では、2011/11/14から2011/11/19に予約が入っている部屋を抽出したいと言った時に
SELECT * FROM hoge WHERE from_date >= '2011/11/14' AND to_date <= '2011/11/19'
と、安易にしては当然、ダメです。これでは1つめのデータしか取得出来ません。
この場合、以下のようなタイムラインを描くことが出来ます。
1,2,3,4のパターンは範囲内という扱いにする必要がある
結論から言うとSQLは以下の通りとなる
SELECT * FROM hoge WHERE ('2011/11/14' <= from_date AND from_date <= '2011/11/19') OR ('2011/11/14' <= to_date AND to_date <= '2011/11/19') OR ('2011/11/14' >= from_date AND '2011/11/19' <= to_date)
このSQLで希望通りの結果が表示されます。
WHERE ('2011/11/14' <= from_date AND from_date <= '2011/11/19')この条件でID1,3がHitする。
('2011/11/14' <= to_date AND to_date <= '2011/11/19')
2つ目の条件でID1,2がHit。
('2011/11/14' >= from_date AND '2011/11/19' <= to_date)
最後の条件ではID4がHit。
この条件をORで指定する事により、正しい検索が行われます。
タイムラインの図を見ながら、考えるとわかりやすいと思われます。
2011年11月16日
[Rails]will_paginate 検索条件を指定する画面から生成する場合
will_paginateを利用すると、1ページあたりに表示するデータ件数を制限出来き、次ページや1.2.3.等のページリンクも簡単に作成出来る。
しかし、検索条件を指定するページから新たに表示する場合にはparamの値に気をつける必要がある。
例:search → index という画面遷移を前提。searchは検索条件、indexは結果を表示。paginateはindexにて行う。
hoges_controller.erb
def result staffwhere.and('code = ?',"#{params[:code]}") @hoge = Hoge.paginate(:page => params[:page],:conditions=>where,:per_page => 20) render :action => 'index' end
index.html.erb
<%= will_paginate @hoges, :previous_label => '«前', :next_label => '次»' %>
こんな感じにすると、indexのページには前へ1,2,3,4...次へというリンクが付くが、リンクの項目がpage=1とかpage=3とかページ番号が付く。
実際に次へや2をクリックしてページを切り替えると、検索条件が無しの状態で全件表示になってしまう。
検索条件をコントローラーで使いまわすように index.html.erb
<% pm={:code => params[:code]} %> <table> (省略) </table> <%= will_paginate @hoges, :previous_label => '«前', :next_label => '次»', :params => pm %>
というように、paramsの値を追加する必要がある。これで、ページを切り替えても検索条件は保持される。
2011年11月14日
[Rails]ActiveScaffoldでRestfulしている場合のroutes.rbの設定
次へやページを変えると
こんな感じでActiveRecord :: Record Not Found なんたらってエラーが発生。
Restfulの場合、routes.rbは以下の設定が必要
map.resources :hoge, :active_scaffold => true'
という事でroutes.rbを確認。
map.resources :hoges
となっていたので
map.resources :hoge, :active_scaffold => true'
に変更。ちなみにhogesではなくhoge(単数形)。
ルーティングを変更して、再度、次へをクリックしたところ、正常に次ページが表示されました(^^)
根深い問題ではなくて良かった。
2011年11月14日
hamazoでSyntaxHighlighter3を利用
その際に、ソースコードを貼り付ける必要が出てきますが、どうせなら綺麗に貼りつけたい!
という事でhamazoでSyntaxHighlighterを利用出来るようにしてみました
これでhamazoでもこのように綺麗にソースコードが表示出来ます!
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <title>テスト</title>
これで備忘録も見やすくなります。
という事でhamazoでSyntaxHighlighterを使用する方法を記載します。
注意:この設定を行うと、BLOGの記事は自動で改行されなくなります。明示的にbrタグで改行する必要があります。
注意2:hamazo単体では利用出来ません。hamazo以外にファイルをアップロード&アクセスがする事が出来るサーバーが必要です。
1.SyntaxHighlighter本体をダウンロード
2.ダウンロードしたファイルを解凍。testsフォルダ以外をアクセス可能なサーバーへアップロードします。
3.管理画面の左のメニューから「ブログの設定」→「テンプレート」を選択
使用中のテンプレートの「カスタマイズ」を選択
4.トップページ、個別記事、アーカイブを以下のように追記します。