トップページphp
1001コメント336KB

【Ruby】Ruby on Rails Part6

レス数が900を超えています。1000を超えると表示できなくなるよ。
0001nobodyさん2008/10/24(金) 17:46:53ID:???
■前 Ruby on Rails のスレ が
http://pc11.2ch.net/test/read.cgi/php/1207425569/

■参考サイト
<英語>
本家:http://www.rubyonrails.org
API document:http://api.rubyonrails.com/
開発者のblog:http://weblog.rubyonrails.org/
参考wiki:http://wiki.rubyonrails.org/rails

<日本語>
Rails' wiki: http://wiki.fdiary.net/rails/

■参考スレ
Rubyについて Part 33
http://pc11.2ch.net/test/read.cgi/tech/1223709050/
Ruby 初心者スレッド Part 22
http://pc11.2ch.net/test/read.cgi/tech/1221467121/
0804nobodyさん2009/03/30(月) 16:40:11ID:???
形だけNULLにするとインデックスがきくことによって逆に遅くなったりする。

形だけNULLを空白にするとインデックスがきくことによって逆に遅くなったりする。
0805nobodyさん2009/03/30(月) 17:32:33ID:???
ActiveForm 以外にフォームを作る DSL はありませんか?

できれば YAML, 配列, ハッシュなどで記述できると嬉しいです。
0806nobodyさん2009/03/30(月) 23:07:22ID:???
>>801
がんがれ
0807nobodyさん2009/03/31(火) 00:58:24ID:1AlmVzbD
書籍を見て以下のようにコントローラとモデル、ビューも書いたのですが、
salable_itemsが見つからないと怒られます
コントローラに、@products = Product.find(:all, :order => "date_available desc")
のように記載すると動作します。
アクセス修飾子等考えたのですがわかりません、何が原因なんでしょう?
Railsは2.1を使っています。

class StoreController < ApplicationController
def index
@products = Product.salable_items
end
end

class Product < ActiveRecord::Base
def self.salable_items
find(:all, :order => "date_available desc")
end
end
0808nobodyさん2009/03/31(火) 01:23:58ID:???
コントローラは一部ソースを切り出してるのかなと思うけど、
モデルはそれで全部なの?実際にブラウザで確認した結果、そのエラーが出たのかな?
0809nobodyさん2009/03/31(火) 01:42:31ID:oWRq8GzN
>808
ブラウザで確認した結果上述のエラーがでました。
モデルでは、入力された値のチェックを行っていますが
StoreコントローラではProductに入力は行われないので省きました。
情報を書ききれてなくて申し訳ないです。
0810nobodyさん2009/03/31(火) 01:48:09ID:???
というか、エラーメッセージとスタックトレースはいずこ。

コード的には間違ってないと思う。(salableはsellableのような気がするけど)
0811nobodyさん2009/03/31(火) 02:08:55ID:???
>>809
暇だからproductsテーブルを作って試してみたが普通に動くよ。
CentOS5.2、Ruby1.9.1、Rails2.3.2。
コントローラで元の「@products = Product.all」をコメントアウトしたけど、
コメントを入れ替えれば挙動も当然かわる。

推測ではモデルのほかの部分が問題なんじゃないだろうか。
可能な限り情報を出さないと、ほかの人間からは分からないと思う。
自分では問題ないと思ってる部分が問題なことは多いからね。


***** おれが試したソース *****

コントローラ(一部、変更部分は完全コピペ)

def index
# @products = Product.all
@products = Product.salable_items

respond_to do |format|
format.html # index.html.erb
format.xml { render :xml => @products }
end
end

モデル(全部、完全コピペ)
class Product < ActiveRecord::Base
def self.salable_items
find(:all, :order => "date_available desc")
end
end
0812nobodyさん2009/03/31(火) 02:23:02ID:???
脱線だけど、2.1ならnamed_scopeで書くことも出来るね。
0813nobodyさん2009/03/31(火) 08:50:54ID:???
>>812
たいしたことない省力化のようにみえて、何気に便利だよな
0814nobodyさん2009/03/31(火) 13:01:11ID:ZMAhYize
初心者質問すいません。
viewからcontrollクラスのメソッドを使うことってできないのでしょうか??
例えば、ApplicationControllerクラスに現在自分がログインしているユーザーのIDを取得するメソッドを定義しておいて、それをviewから使いたいようなことがあると思うのですが、どうするのがベストなのでしょう??
教えて頂けると幸いです。
0815nobodyさん2009/03/31(火) 14:53:49ID:???
コントローラでインスタンス変数に代入しておく。
0816nobodyさん2009/03/31(火) 15:01:58ID:???
restful_authenticationとかを使ってるなら、
current_user.id みたいにヘルパで取れる
0817nobodyさん2009/03/31(火) 18:35:45ID:???
コントローラーで
@hoge = now_login_user
みたいにインスタンス変数に入れておけばViewで以下のように使える
<= @hoge >
0818nobodyさん2009/03/31(火) 19:09:06ID:???
helper_method :my_method
08198092009/03/31(火) 21:29:42ID:???
>811
文法的にはあっているということでまるまる書き直してみたら動きました。
有難うございます。
0820nobodyさん2009/04/01(水) 03:46:07ID:i7k4rzu/
>>803
・nilチェック
アプリケーション層の話だな。フォームの未入力項目がnilでくるなら、
カスタムバリデーションを書くときになどに、常にそれを想定して
メソッドを呼び出す前にnilチェックをする必要がある。
空文字でくるなら、その必要がない(不正なデータなので例外で一括キャッチできる)

・count
NULLを表すデフォルト値を省くのがそれほど複雑な条件とは思えないし、
明快さを望むなら有効/無効を表すフラグを持てばいいかと

・NULLの扱い
意図としては、アプリ層のロジックがDBの実装に依存するのはいやよネーという話だったんだが
Oracleが手元にないので確かめられないけど、SQL直たたきでないfindをつかって
column_name = '' でNULLを引っ掛けられませんか?
だとすると空文字/NULLでレコードの有効無効を判断する処理はDB依存になるな・・・
面倒なorz

しかし、オブジェクト指向的(というかRuby的?)には空文字とnullが別物というのは自然なように思えるんだが、
DBな人にはそうでもないんだろうか
0821nobodyさん2009/04/01(水) 09:51:57ID:???
SQLのIS NULLをたまには思い出してあげてください。
0822nobodyさん2009/04/01(水) 12:02:24ID:???
「有効/無効を表すフラグ」はあり得ないだろw

オラクルは古いDBというのもあって負の遺産も引きずってるからな。
長さゼロ文字列とNULLは今後区別するかもしれません、
と何年も言ってるが影響がでかすぎて一向に変わらん。
たぶんずっと変わらないと思う。その点Railsはやりたい放題だよなw
0823nobodyさん2009/04/01(水) 14:41:12ID:???
実務に使うには貧弱な validation に悩んでいて

ttp://d.hatena.ne.jp/tsuyoshikawa/20090325/1237977001

を見つけたのですが、こういうやり方が正解なのでしょうか?
0824nobodyさん2009/04/01(水) 15:06:34ID:???
めちゃくちゃです
0825nobodyさん2009/04/01(水) 16:29:41ID:???
どんなのがベストプラクティスでしょう?
08268142009/04/01(水) 19:55:35ID:TXtYORpd
ありがとうございます!

すいませんもう一個質問させてください。

Sampleモデルクラスのオブジェクトが入っている配列 arr からSampleクラスがbelongs_toしているTestモデルクラスのオブジェクトを配列の要素ごとに全て得たい場合は、

arr2 = []
arr.each do |v|
arr2 << v.test
end

みたいにループ文を回して取得するしかないのでしょうか??

arr2 = arr.ほにゃらら

みたいな形式で取得できたら便利だなーと思うのですが・・
0827nobodyさん2009/04/01(水) 21:39:09ID:???
arr2 = arr.collect(&:test)
ちょっと暗号じみてるけど、これは
arr2 = arr.collect {|v| v.test }
と同じ。collectはmapと書いてもいい。

0828nobodyさん2009/04/01(水) 22:11:54ID:???
>>826が欲しいのは、もしかすると
arr2 = arr.collect{|v| v.test}.flatten
じゃないかな。違ったらごめん。
Smalltalkを習ったので、俺もcollect派。
BagやSetが時々欲しくなる。
0829nobodyさん2009/04/01(水) 23:05:43ID:???
>>825
モデルにカスタムのバリデーションを追加する手段はちゃんと提供されてる。
コントローラーは振り分けを行ったり、全体の制御を行うところ。
こんなごちゃごちゃのめちゃくちゃにするなら、
最初からRailsなんて使わなきゃいいのにと思う。
0830nobodyさん2009/04/02(木) 08:49:27ID:6GTBW0dp
>>829に同意。
>>825は絶対やってはいけない。
08318252009/04/02(木) 09:29:35ID:???
>>829-830
ありがとうございます。了解しましたー。

モデルにカスタムのバリデーションを追加する情報 ( ドキュメント ) なりを教えてもらえませんか。。。
0832nobodyさん2009/04/02(木) 10:25:19ID:???
モデルクラスの中にオーバーライドして使ってね

つvalidate
つvalidate_on_create
つvalidate_on_update
08338252009/04/02(木) 11:42:16ID:???
>>832
ご親切にありがとうございます。
ちゃんと用意されているのですね。素晴らしい。
0834nobodyさん2009/04/02(木) 14:47:58ID:???
Google Docs にプログラム不要マウスだけでフォームを作る機能があります。

ttp://journal.mycom.co.jp/news/2008/02/08/019/index.html

そういった Rails で作られたソースの公開されているアプリやプラグインをご存じありませんか?
08358342009/04/02(木) 18:14:31ID:???
Rails というより JavaScript 寄りなので http://pc11.2ch.net/test/read.cgi/php/1166751613/759 で聞いてみることにしました。
0836nobodyさん2009/04/03(金) 19:47:58ID:???
質問です。
あるフィールド(複数の場合も)からの計算結果を表示したいとき、
メソッドはモデルに置くのとビューのヘルパーに置くのと、どちらが適当なのでしょうか。
例えば、purchase_dateという日付のフィールドがあるとき、
どこまで正確なのかを表すのにpur_date_qualというフィールドにY, M, Dの
どれかを入れておいて、Yなら年だけ、Mなら月までを表示させたいとき、
このメソッドはモデルとヘルパーとどちらに属すのでしょうか。

モデルに置いた場合は他のデータベースでもよくある計算フィールドのイメージで、
オブジェクト指向的にはこちらが正解のような気がするのですが。
0837nobodyさん2009/04/03(金) 21:12:20ID:0BZVS1Kz
モデルに別名でアクセサつけるか
面倒くさそうならヘルパ使うかなー
0838nobodyさん2009/04/03(金) 23:11:23ID:gpEgAnUB
http://www.pixa.cc/ ここのサイトRuby製だそうですが
糞重くて仕方ないです。どうしたらよくなるのか運営に言いたいんですが
0839nobodyさん2009/04/03(金) 23:13:07ID:???
「scalaでも使え」と言ってみたら?
0840nobodyさん2009/04/04(土) 01:56:19ID:???
>>838
トップから画像数枚眺めてみたけど別に重くはなかったぞ
0841nobodyさん2009/04/04(土) 02:22:46ID:???
最近こういう画像投稿サイト多いね
しかもどこもそこそこ盛況なようで結構なことですな
うちの会社の自社サービスなんて2年たって会員数2桁ですよwww
マネージャは冷や飯くらったらしい
0842nobodyさん2009/04/04(土) 03:25:38ID:???
アクティブユーザーは2人くらい?
0843nobodyさん2009/04/04(土) 08:24:37ID:???
>>841
どうやったらそんな奇跡的な会員数になるのか興味あるな。
0844nobodyさん2009/04/04(土) 15:01:46ID:???
会員全員社員
08458262009/04/04(土) 15:52:57ID:ZJouk0fd?2BP(0)
>>827
>>828
ありがとうございます。どちらでもできました。

また、疑問ができてしまたのですが、
arr2 = arr.collect(&:test)
の:testの前の&はなんでしょうか??
http://www.ruby-lang.org/ja/man/html/_A5AFA5E9A5B9A1BFA5E1A5BDA5C3A5C9A4CEC4EAB5C1.html#a.a5.e1.a5.bd.a5.c3.a5.c9.c4.ea.b5.c1
ここらへん見るとproc辺りが関係してるのかと思うのですが、そもそもブロックが定義されてない??
railsっていうよりrubyの質問っぽいですが、教えていただけると幸いです><
0846nobodyさん2009/04/04(土) 16:08:10ID:???
つーか自社サービスにすればおkって見通しがそもそも甘い。
0847nobodyさん2009/04/04(土) 17:06:49ID:???
&は、最後の引数に対して使うもので、指定したものをブロックとしてメソッドに引き渡す。
そのときどういうブロックに変換されるかを、引数(今回はSymbolである:test)の#to_proc
メソッドで定義できる。

http://www.ruby-lang.org/ja/man/html/_A5E1A5BDA5C3A5C9B8C6A4D3BDD0A4B7.html#a.a5.d6.a5.ed.a5.c3.a5.af.c9.d5.a4.ad.a5.e1.a5.bd.a5.c3.a5.c9.b8.c6.a4.d3.bd.d0.a4.b7
08488452009/04/04(土) 17:41:25ID:ZJouk0fd?2BP(0)
>>847
なるほど〜。ありがとうございます!
複雑ですがやっぱり便利ですねruby・・
08498362009/04/04(土) 22:55:38ID:???
>>837
ありがとうございます。とりあえず、モデルに定義することにします。
0850nobodyさん2009/04/05(日) 00:59:52ID:???
Railsで Access のような業務アプリを作るとき,帳票印刷はどうしてますか?
あと,ショートカットキーで入力フォームを行き来したりするのはHTMLだと難しいと思うんですが,
そういうインターフェース面はフォームのボタンをマウスでクリックしてもらうしかないのでしょうか?
0851nobodyさん2009/04/05(日) 02:09:32ID:???
そういうのはクライアントサイドだから言語はあまり関係がないぞ。
0852nobodyさん2009/04/05(日) 03:14:38ID:???
まずウェブベースで出来なきゃ他の方法検討するしか無い。
つーかRoR関係ないだろ。

http://pc11.2ch.net/test/read.cgi/php/1025346267/
Webアプリで帳票印刷
0853nobodyさん2009/04/05(日) 20:17:58ID:???
Rails直接関係ないのですが、関連性があると思いここでおききします。
autotest + rspec + ($KCODE = "u") + cygwin(UTF-8化) + ck.exe(or Poderosa)

rspecのログがUTF-8で流れてくるので、UTF-8のcygwinターミナルを使っているのですが、
autotestを実行時に Ctrl+C でautotest自体が終了してしまいます。
Ctrl+Cではテストの再実行を期待しています。
ただ、コマンドプロンプトでautotest実行した場合は、Ctrl+Cで期待通りテストが再実行されます。
(通常、終了は Ctrl+C→Ctrl+Cですよね。コマンドプロンプトでは期待通り)

autotestでイベント時にサウンドを鳴らすようにしているのですが、cygwinターミナルからだと、
autotest終了音がやはりなりません。

これはどういった対応策がとれるものでしょうか?
Windowsやその他の環境の皆様はどうしておられますか?

もし、他に該当スレがあれば誘導してください。
0854nobodyさん2009/04/05(日) 20:35:25ID:a/bIl6WE
link_to で、こういうのを生成したいのですが
<a href="http://sample.com/aaa/bbb/">http://sample.com/aaa/bbb/<;/a>
うまい書き方はないでしょうか??
第一引数で指定する部分が :controller とか :action で指定するものと重複するので、なんとか省略できないのかと思っているのですが・・
0855nobodyさん2009/04/05(日) 22:48:27ID:???
>>853
WindowsのコマンドプロンプトでUTF-8を表示する方法がある。

>>854
そういうヘルパを書けば良いだけでは。
link_toの第一引数が無くて、中ではurl_forを使うやつ。
0856nobodyさん2009/04/05(日) 23:00:04ID:???
>>854
link_to は第一引数に nil 渡すとURL文字列にリンク張ってくれるよ。

<%= link_to nil, :controller => :foo, :action => :index, :only_path => false %>
0857nobodyさん2009/04/05(日) 23:08:02ID:J2cktlyk
form で Validation エラーになると link_to_unless_current が上手く動作しなくなる・・・。
どうも form の Submit 先の URL が 「/shops/1/items」 みたいに「new」とかがない状態で生成されるからみたいなんだが、これってどうすればよい?
単純に redirect_to してしまうと Validation のエラーメッセージが消えてしまうし・・・。
0858nobodyさん2009/04/05(日) 23:50:04ID:???
>>857

そういえばみんなどうやってるのか気になるな。
自分は普段こんな感じ
エラー時はリダイレクトじゃなくてrender :action => アクション名で表示する

class SampleController < ActionController
 def new
  @shop = Shop.new
 end

 def create
  @shop = Shop.new(params[:shop])
  unless @shop.valid?
   render :action => :new
   return
  end

  @shop.save
  # 次の画面へリダイレクト
 end
end
0859nobodyさん2009/04/06(月) 00:08:52ID:???
確認画面無しなのか。羨ましいな。
確認画面入れるといろいろと面倒なんだよね。
IEだと入力画面でAjax使って入れた値が消えてくれたりとか。

自分なら、
render :action => :new and return unless @shop.valid?
と1行で書くかな。
0860nobodyさん2009/04/06(月) 00:32:13ID:???
>>859
あ、社内で使う管理画面は確認画面ない場合もあるけど、
実務ではほとんど確認画面あるよ。
その場合は、ボタンに名前(submitのname)付けて対応してる。
new -> confirm -> createという3画面の場合はこうかな。

# 確認画面
def confirm
 @shop = Shop.new(params[:shop])
 # 入力画面に戻る
 if params[:btn_back]
  render :action => :new
  return
 end

 # 登録
 if params[:btn_next]
  # エラー時入力画面へ
  render :action => :new and return unless @shop.valid?
  return

  # 保存して完了画面にリダイレクト
  @shop.save
  redirect_to :action => :create
 end
end
0861nobodyさん2009/04/06(月) 04:20:31ID:???
おれはコントローラにstate持つようにして、それでアンカーのON/OFFを切り替えるようにした
RESTを厳密に適用していくと、URIは(人間系の)画面表示から独立したものとして扱われていくような気がする
アンカーのON/OFFは人間系の処理なので、URIからどうこうするのは無理が出てくるのではないかと思う
つーか、routeの別名からアクセスしただけでも動かなくならね?的な柔軟性のなさが使えなさすぎるw

リダイレクト時のvalidation結果保持は俺も欲しいのよね・・・
エラーメッセージだけとかデータ量が小規模ならやりようがないこともないけど
リダイレクト時にエラーメッセージをあらかじめレンダリングしておいてflashで渡したりとか、シリアライズしたバリデーション結果をflashで渡したりとか
データ量が多い場合は使えないから、システム全体の統一感が崩れるのでやらない
POSTリダイレクトとかできんかなとも思った
0862nobodyさん2009/04/06(月) 13:55:03ID:???
>>860
実務レベルでそのコードは…
0863nobodyさん2009/04/06(月) 14:49:19ID:eCZIYZ8I
まぁ仕様を満たしていて不具合とかなければいいんじゃない?
0864nobodyさん2009/04/06(月) 19:01:32ID:???
Vista ユーザで ttp://kabus.dreamhosters.com/chm/rails/ にある chm が開けてる人いますか?

2.1.x や 2.3.x をいろいろとダウンロードしても

・起動時、セキュリティの警告が出る
・気にせず開いても「Web ページへのナビゲーションは取り消されました」と出る
・ただし目次、キーワード、検索は動く

という感じ。

rubymanjp.chm は問題なく動くのだけど。
0865nobodyさん2009/04/06(月) 21:25:24ID:???
ruby:1.8.7
rails:2.1.0
でやってるんだけどto_dateって使えないの?
ググったら1.8.6だとprivateメソッドで定義されて〜
とか書いてたけどto_datetimeやto_timeとかもundefind methodになる…
0866nobodyさん2009/04/06(月) 22:08:52ID:???
>>865
irbで試したけど、2.3.2では使えてる(Rubyは1.8.7-p72)。
require 'rubygems'
require 'activesupport'
"20090406".to_date
08678652009/04/06(月) 23:47:30ID:???
2.3.2か…
制作済みの社内アプリ全部2.1.0なんだよなぁ…
http://wiki.fdiary.net/rails/?AdjusterExtension-0001
に書いてる
unless @schedules.map {|s| s.schedule_date.to_date }.include?(date)
cell_text << link_to("New", :controller => 'schedule', :action => 'new', :id => @event, :date => date)
end
の部分で詰まってる。
to_dateじゃなくても出来そうな気がするんだけど。
もうちょい頑張って駄目だったら諦めて2.3.2にするよ。
0868nobodyさん2009/04/07(火) 01:31:04ID:???
その部分のソースだけコピペすればいいじゃん
0869nobodyさん2009/04/07(火) 06:41:24ID:???
ActiveSupportのソースを見ればいいじゃん
0870nobodyさん2009/04/07(火) 06:55:15ID:???
>>867
>>868-869のいうようにしたらいいと思うよ。

ActiveSupportのソース見ろって言われても分からないかもしれないから説明すると、
・gem install railsで2.3.2を入れる
・gem serverコマンドを実行してからhttp://localhost:8808にアクセス
・activesupportのrdocを見る
・Methodsのところにメソッド一覧があるからto_dateで検索

ActiveSupport::CoreExtensions::Time::Conversions
ActiveSupport::CoreExtensions::String::Conversions
あたりのto_dateのソースを見る(メソッド名のリンクをクリックするとソースが見れる)

ソースを自分のプロジェクトに使う時は、environment.rbの一番下でとりあえず定義すればいいと思う。
(他にもプラグインにするとか方法あるけど説明が面倒)

↓これはActiveSupport::CoreExtensions::Time::Conversionsのto_dateの例
irbでもコピペすれば動くよ

require 'date'
class Time
def to_date
::Date.new(year, month, day)
end
end
Time.now.to_date
0871nobodyさん2009/04/07(火) 08:30:14ID:???
>>870のやさしさに感動した
0872nobodyさん2009/04/07(火) 08:47:39ID:BAwL1OSs
gem serverはキーワード検索機能があるともっと便利だよね
0873nobodyさん2009/04/07(火) 11:19:37ID:???

>>864
よくある話で、IEでchmをダウンロードするとそうなるかも。
chm右クリックでのプロパティでセキュリティのチェックをはずすかつけるかするとみられるはずですよ。
08748532009/04/07(火) 11:22:41ID:???
>>855
> WindowsのコマンドプロンプトでUTF-8を表示する方法がある。
MSゴシックで、chcp 65001するやつですよね。
chcp 65001すると、何故か、autotestコマンドが動かないんですよね…。
何も出力されずに終了してしまう。chcp しないとちゃんと動く

うーん…
08758532009/04/07(火) 11:33:13ID:???
chcp 65001だと、irbも動かない(起動してすぐに終了してしまう)ですね。変なのー
08768642009/04/07(火) 11:45:20ID:???
>>873
ありがとうございます!
Fx 使いだったので、chm 右クリックして「ブロック解除」で見られるようになりましたー。
0877nobodyさん2009/04/07(火) 11:46:08ID:???
>>864
エクスプローラーから、そのchmファイルのプロパティ出して
セキュリティの項目のブロックの解除、をやる。

ダウンロードしたchmファイルはVistaではこれが必要。
0878nobodyさん2009/04/07(火) 11:47:50ID:???
セキュリティの項目って全般タブの一番下ね
0879nobodyさん2009/04/07(火) 11:49:11ID:???
ってギリギリ遅かったか
なんというタイミングだw
08808532009/04/07(火) 12:04:33ID:???
原因わかりました。chcp 65001だとバッチファイルが動かないみたいです。

直接、
 ruby (rubyインスコしたディレクトリ)\bin\autotest
としてautotestを起動したら無事に動かせました。

irbとかは chcp 65001だと日本語入力がそもそも効かずだめですねw

ありがとうございました。
08818532009/04/07(火) 12:18:13ID:???
>>880 でいけたと思ったのですが、やはり駄目でした。
日本語が ・・・・・・・ と点で表示されてしまうようです。

また、いろいろ試してみます。それでは失礼します。
0882nobodyさん2009/04/07(火) 12:29:06ID:???
そりゃフォントのせいだけどな
08838642009/04/07(火) 15:53:52ID:???
>>877-879
いえいえ、ありがとうございましたw
0884nobodyさん2009/04/07(火) 20:33:42ID:???
>>868-870
ありがとうございました。
to_dateはクリアできました。

で、今配列に{Sun, 19 Apr 2009=>[], Fri, 10 Apr 2009=>[],…}
ってな具合に1月分date型で入ってるんだけど
Tue, 07 Apr 2009 ←今日の日付
とinclude?するとfalseになる。
=>[]があるからfalseになるのかな?
include?って完全一致?
0885nobodyさん2009/04/07(火) 21:01:55ID:???
irb -rubygems -ractive_support --prompt=simple
>> days = (('2009-04-01'.to_date)..('2009-04-30'.to_date)).inject({}){|h,d| h.merge(d=>[])}; nil
>> days.include?('2009-4-7'.to_date)
=> true
08868542009/04/08(水) 13:05:31ID:yKX835d9
<%= link_to nil, :controller => 'cups', :action => :show, :id => params[:id], :only_path => false %>
これでいけました!レスくださった方々ありがとうございましたm(_ _)m
08878532009/04/08(水) 14:17:09ID:???
結局、rspecでコマンドプロンプトの時だけ、STDOUTで文字が出る前にSJISに変換してしまうことにしました。
半分あきらめに近いですが、SJISの範囲内ならまあいいということで…

例としては、spec_helper.rb(rspecで共通で読み込むルーチン)に以下を追加します。

require 'kconv'
if ENV['OS'] =~ /Windows/i && ENV['TERM'].nil?
  class StdoutHook
    def write(str)
      #    STDOUT.write str.to_s.kconv(Kconv::SJIS,  Kconv::UTF8)
      STDOUT.write str.to_s.tosjis
    end
    $> = new
  end
end

STDOUT乗っ取り?はMLの過去ログを参考にしましたが、もっといい方法があれば捕捉お願いします。
[ruby-list:45331] Re: Windows コマンドプロンプトで UTF-8を出力するには
http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-list/45331
08888532009/04/08(水) 14:46:23ID:???
>>887 修正
---- spec_helper.rb への追加コード ----

# only command prompt at Windows
if ENV['OS'] =~ /Windows/i && ENV['TERM'].nil?
  require 'kconv'
  unless defined?(STDOUT.old_write_for_cmd)
    class << STDOUT
      alias :old_write_for_cmd :write
      # override STDOUT.write
      def write(str)
        # old_write_for_cmd str.to_s.kconv(Kconv::SJIS,  Kconv::UTF8)
        old_write_for_cmd str.to_s.tosjis
      end
    end
  end
end
0889nobodyさん2009/04/08(水) 16:29:28ID:???
rails のルートディレクトリを取得できるヘルパーなりはありませんか?

現在は File.dirname(__FILE__) + "/../log" とかやっているのですが、
RAILS_ROOT + "/log" とかできるといいなーと。
0890nobodyさん2009/04/08(水) 17:25:39ID:???
rails で便利な collection_select を、
rails 以外のふるーいアプリで使いたいのですが、

$ cat test.rb
require 'action_view'
collection_select(...)
$ ruby test.rb

としても undefined method `collection_select' なんて言われます。

ActionView.Helpers.FormOptionsHelper.collection_select(...

にした場合は undefined method `Helpers' for ActionView:Module と。

どうすれば rails 以外から collection_select が使えるようになりますか?
0891nobodyさん2009/04/08(水) 20:49:56ID:???
>>889
自分で試してみたの?
普通にRAILS_ROOT使えるよ。
0892nobodyさん2009/04/08(水) 21:33:38ID:???
最近は Rails.root (Rails.env とか Rails.loggerもあるよ!)
0893nobodyさん2009/04/08(水) 22:18:15ID:???
>>892
お、それは初めて知った。
今試してみたら、Rails.rootはPathnameで返って来るんだね(RAILS_ROOTはString)。
0894nobodyさん2009/04/09(木) 00:12:20ID:Hon6X4Il
>>592
現に使われている以上、負け犬の遠吠えに他ならないレスだな
http://www.grails.org/Testimonials
08958532009/04/09(木) 01:42:24ID:???
>>888 なんですが、require "win32/console/ANSI" が絡むと(+ rspecオプションで--colur)、
文字化けしまくりで、
直すのやっかいそう&そろそろrails関係なさげなので、本スレの方に行ってきます。
0896nobodyさん2009/04/09(木) 10:06:46ID:8toP/BB5
2.2.2 で gettext で動かせてる人っています?
もしいたらバージョンと設定方法教えてもらえないでしょうか・・・。
0897nobodyさん2009/04/09(木) 10:55:54ID:???
2.2.2では、Rails標準のi18n使った。
その頃gettextは対応してなかったので。
gettext 2.0.0 出たし、いまはどうか分からないな。
08988962009/04/10(金) 00:58:01ID:???
>>897
レスありがとうございます。
やっぱり無理なんですかね・・・。
公式に「無理!」って情報とかってあったりするんでしょうかね・・・。

ちなみに、i18n を使う場合、メールの iso-2022-jp 周りとかってやっぱり自前になるんですか?
0899nobodyさん2009/04/10(金) 08:58:13ID:4tZH5Ujq
そうなるね。
でも、iso-2022-jpで送信する方法は検索すればすぐ見つかるから苦労しないと思う。
0900nobodyさん2009/04/10(金) 10:03:18ID:???
iso-2022-jp の場合、日本語の添付ファイルが化けるけど、
RFC 違反だけど、多くのメーラで文字化けしない方法ってあるよね?
その ruby 版のコードってどこにありますか?><
0901nobodyさん2009/04/10(金) 11:29:23ID:???
rails _2.3.2_ add して
ttp://code.nanigac.com/source/wiki/view_title/641/%E8%B6%B3%E3%81%97%E7%AE%97
をコピペして勉強してます。

値を入れずにボタンを押すと

undefined method `self_and_descendants_from_active_record' for Add:Class

が出ます。ググると
ttp://jijixi.azito.com/cgi-bin/diary/index.rb?date=20090317#p02
があったので、app/controllers/add_controller.rb に

def self_and_descendants_from_active_record
 self_and_descendants_from_active_record
end

としてエイリアス?を用意しても変わらず。どうすれば解決するでしょうか。
0902nobodyさん2009/04/10(金) 12:17:16ID:???
それコントローラーのメソッドなのか?モデルじゃなくて?
0903nobodyさん2009/04/10(金) 13:02:54ID:???
activerecord-2.3.2/lib/active_record/base.rb にあるものだけど、2.3.2 になってスペルミスが修正されたみたいなのです。
レス数が900を超えています。1000を超えると表示できなくなるよ。