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

【Ruby】Ruby on Rails Part7

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん2009/04/30(木) 23:07:27ID:???
■前 Ruby on Rails のスレ が
http://pc11.2ch.net/test/read.cgi/php/1224838013/

■参考サイト
<英語>
本家: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 35
http://pc12.2ch.net/test/read.cgi/tech/1238194350/
Ruby 初心者スレッド Part 27
http://pc12.2ch.net/test/read.cgi/tech/1238632943/l50
0681nobodyさん2009/07/14(火) 15:25:59ID:???
じゃあURLはいいからどんなサービスなのか教えてよ
アップローダ?ブログ?SNS?それとももっと先進的な何か?
0682nobodyさん2009/07/14(火) 15:39:19ID:???
難癖つける気、満々ですな。
Ruby ユーザって人格障害者多いね。

そんなことを気にしないで自分が作りたい
Web サービスを無料サーバを使ってどんどん作りなよ。
0683nobodyさん2009/07/14(火) 15:44:25ID:???
俺は情報提供サイト。
自分の好きなのや、興味のあるものを。
非 IT やオタクじゃないのをターゲットにすると
アフリをクリックする傾向あるね。
まずは無料で Web サービスをいろいろ作って
試行錯誤して経験値を積むのが重要。

PHP/Perl で作るのに飽きたので Rails で、
と思ったけど無料サーバのない現状にゲンナリ。
0684nobodyさん2009/07/14(火) 15:45:49ID:???
作りたいサービスなんて無いよ?そもそもRailsいじってないしね
ただWebアプリで儲けてるって人がどんなサービス提供してるか気になってさ
で、どんなサービスなの?
0685nobodyさん2009/07/14(火) 15:51:17ID:???
字の読めない人がいる。。。
0686nobodyさん2009/07/14(火) 16:06:14ID:???
もしRailsプレインストール済の無料レンタルサーバーがあれば
みなさん使いますか?
どのバージョンならいいですか?
0687nobodyさん2009/07/14(火) 16:15:12ID:???
Rails はバージョンによって互換性がまったくないから
長期間運用すると、ユーザによって
バージョン変えるな、新しくしろ、と大変そうw

あと Passenger って何百日安定稼働!ってないよね。
毎日 cron で早朝リブートしてる…。

Passenger がもっと安定して、
省メモリ、高速になったらしい Rails 3.0 からが
運用側としてはいいのかなぁ。
0688nobodyさん2009/07/14(火) 16:19:09ID:???
それ以外に Ruby が 1.8 か 1.9 か、という問題があるよね。

PHP/Perl は Ruby に比べて互換性の問題が小さい。
あと、必要メモリも 1/2 〜 1/3 で済むのでサーバ提供者は無料提供可能。

なので現実的に Ruby 1.9 & Rails 3.0 が安定してからの提供になるんだろうな。
0689nobodyさん2009/07/14(火) 16:53:09ID:???

>バージョン変えるな、新しくしろ、と大変そうw

>それ以外に Ruby が 1.8 か 1.9 か、という問題があるよね。

各バージョン毎の無料サーバーが立ってて同時に複数借りられれば
問題なさそうですね!
0690nobodyさん2009/07/14(火) 17:05:18ID:???
> 問題なさそうですね!
> 問題なさそうですね!
> 問題なさそうですね!
0691nobodyさん2009/07/14(火) 17:12:17ID:???
>>664 >>667 >>689
Rails ユーザの思考力は PHP の構文の出来並みですね。
0692nobodyさん2009/07/14(火) 17:29:36ID:???
>>691
とびっきり残念な Rails ユーザがいるのは事実だけど、全員ではない。
0693nobodyさん2009/07/14(火) 18:20:35ID:???
IDないから自作自演かもしれない。
0694nobodyさん2009/07/14(火) 18:35:28ID:???
いずれにしても煽られるくらいの存在になったというのは
裏を返せば市場が広がってるということなんで嬉しい話。
0695nobodyさん2009/07/14(火) 18:42:42ID:???
無料 Rails サーバがない程度の市場かよ
0696nobodyさん2009/07/14(火) 18:55:19ID:???
xrea
0697nobodyさん2009/07/14(火) 20:04:16ID:???
また基地外が現れたのか。

半角の前後にスペースがきっちり入ってるからわかりやすいな。
定期的に荒らすのはなんかのバイオリズムか?ちゃんと薬は飲めよ。
ぶつぶつ一人で会話して、ヒッチコックのサイコかよ。
0698nobodyさん2009/07/14(火) 20:34:01ID:???
そもそも儲かる見込みのサイトをrorで作れるなら、有料専鯖でも良いじゃないかと。
無料じゃないと困る様なへぼサイトならみんなと同じphp使ってろと。

儲かる仕事作れないのに、高額のマク強請るマカみたいなスレだ。
0699nobodyさん2009/07/14(火) 20:43:15ID:???
このスレに足りないもの
それはスルー緑
0700nobodyさん2009/07/14(火) 21:16:19ID:???
> 半角の前後にスペースがきっちり入ってる

初心者スレも本スレもこれで判定してたのに
おまえ・・・
0701nobodyさん2009/07/15(水) 01:55:13ID:???
>>695
無料サーバがない≠市場がない では?

無料鯖がないのは、Rails を動かす場合、
Passenger なり Mongrel なり、一アプリにつき一ポート使うからだと思う。
だからVPSなど、有料でroot権限もらえるとところだったら
Passenger や Mongrel を好きなだけ動かせるだろ。
(VPSだと、安いプランだとメモリが大変だけど)

Java だって Servlet を動かすには Tomcat などが必要だが、
一 Tomcat につき 一ポート使うから、無料サーバではやりにくいだけの話で、
Java による web アプリは、全然マイナーな技術ではないよね。
(レンタルサーバでやるようなものではないけど)

一方 perl や PHP は Apache の中に組み込まれるから(mod_perl、mod_php)、
各ユーザが PHP アプリを動かしてもポートは新たに消費しない。
だから無料鯖でも使われるわけで。

※
レンタルサーバで、あらかじめ Passenger がサーバにインストールされていて、
そのユーザのホームに .hoge (任意のファイル名) を置いておくと、
毎朝の root の cron で httpd.conf に RailsBaseUri の行を追加してくれ、そのあとは
http://{サーバ名}/~{レンタルサーバのアカウント名}/ で Rails アプリが動く、
なんてサービスがあったら、レンタルサーバでもポートを増やさずに
Rails アプリを動かせる、なんてことができていいかも。
0702nobodyさん2009/07/15(水) 02:21:05ID:???
cronにしなくてもhttpd.confにRailsBaseUriを追加してくれる
Webな管理画面があればいいですよね。
Passengerけっこう落ちるって噂ですが。

1. フレームワークがでかいから潤沢なメモリが必要
2. Rubyがそもそもメモリを食う
3. PerlやPHPではでかいフレームワークつかわないから軽いだけ

どれなんですか。
勘で1かと思ってます。
0703nobodyさん2009/07/15(水) 02:50:07ID:???
3
0704nobodyさん2009/07/15(水) 03:31:36ID:???
全部。さらに追加

4. 情報不足とそれに関連した使用者のスキル不足
5. まだあまり枯れてない
0705nobodyさん2009/07/15(水) 08:10:03ID:???
とりあえず目くそ鼻くそを笑う程度の連中だな。
0706nobodyさん2009/07/15(水) 08:14:05ID:???
>>701
>Tomcat につき 一ポート使うから
無知乙。mod_jkとかAJP 1.3てな単語でまずググレ。
javaが無料サーバでやらないのはVMがメモリ食いすぎるのと
javaでは何でも出来てしまうから「共有サーバー」で導入しないだけ。
0707nobodyさん2009/07/15(水) 10:21:44ID:???
要は Rails 無料サーバは当分無理ということ
07087012009/07/15(水) 10:30:33ID:???
>>706
>>Tomcat につき 一ポート使うから
> 無知乙。mod_jkとかAJP 1.3てな単語でまずググレ。

Java は長い間やってきているから、そこら辺は把握しているつもりです。
mod_jk とか mod_proxy_ajp をつかって外部には Apache の port 80 で公開していたとしても、
mod_jk は内部で動かしている Tomcat の port 8009 にスルーするだけだから、
結局、各ユーザごとの Tomcat のプロセスの起動が必要で、
それごとに 8009 (AJP を受け付けるポート)の bind が必要だと思いますが?

あとひとつの Tomcat に、各ユーザの webapp をデプロイする方法も考えられるが、
Passenger は、RailsBaseUri ごとに、動くユーザを変えられるが、
Tomcat は変えられない。
$CATALINA_HOME/webapp/foo アプリは foo ユーザ、/bar は bar ユーザで動かす、
ということができない。

> javaが無料サーバでやらないのはVMがメモリ食いすぎるのと
> javaでは何でも出来てしまうから「共有サーバー」で導入しないだけ。

ここは同意する。
0709nobodyさん2009/07/15(水) 11:44:11ID:???
Passengerが1アプリで1ポートか。すごい使い方だな
0710nobodyさん2009/07/15(水) 13:29:02ID:???
何か違う気がする。
perlやphpでも巨大なライブラリ使う事も出来るけど、もうそれはapacheごと重くなっても構わないって割り切りがあるから。
実際、phpとかperl使ってるサイトは重いし。
rubyは小賢くmod_rubyで重くなるほうに実装しなかっただけ。共用鯖で、はた迷惑になるのを覚悟でどんどん重い実装をしていけば、レン鯖でも通用するとは思う。
0711nobodyさん2009/07/15(水) 16:51:55ID:???
>>708
じゃあapacheは何故80番だけで多ユーザに対応出来るんだ?
MySQLも3306のみ、postgresも5432だけで多ユーザに
対応しているぞ。そこを考えろ。長いっつっても無駄に
長いとVBプログラマー(笑)と変わんなくなるぞ。

お前さんの根本的な間違いは、Tomcatは1ユーザに1ポート
与える必要がある、と考えていること。80から8009に流そうが、
外部に公開するのは80番だけでよいから、利用者はそこで
Tomcatが動いていると意識する必要はない。それと
TomcatはTomcat上でのマルチユーザー(Not UnixUser)に
十分対応している。なんでPassengerと比較するんだ?
共有PHP鯖でマルチユーザのWEBアプリが十分動いてるだろ。
0712nobodyさん2009/07/15(水) 16:57:05ID:???
つーか実際に単独Tomcat1鯖で複数ASPの稼動実績あるしな。
ま、机上の空論で無理無理と考えてるから前進出来ない。
0713nobodyさん2009/07/15(水) 20:16:06ID:???
railsの無料干すと少ないけどいくつかあるだろ
PHP使うとかマゾすぎんぞ
0714nobodyさん2009/07/15(水) 20:55:36ID:???
>>713
heroku 以外、どこ?
0715nobodyさん2009/07/16(木) 01:33:33ID:???
GAE/Java/JRuby
0716nobodyさん2009/07/16(木) 15:59:36ID:4+d1h2nC
でもさPHPは格安プランだとCGIモードの場合が多くない?
PHP moduleの場合は企業向けプランだったり。
0717nobodyさん2009/07/16(木) 16:12:37ID:???
334 :可愛い奥様:2007/06/26(火) 09:46:19 ID:raxdPvfD0
OLだった頃、会社で働いていた日本に超詳しいベルギー人が言ったことに納得してた。
日本文化は身内受けの凝り性文化だそう。
外国文化に負けまいとしているのではなく、
世に意図的にインパクトを与えようとしているのでもなく、
今ここにいる同じ価値観を共有する仲間からの喝采を浴びたいと考える。
その結果、同じものを志す者同士の「これすごいだろ、おもしろいだろ」合戦が始まり、
そこで生み出される物が自然と研ぎ澄まされていく。
でもその競争は、敵対的なものではなく、お互いを尊敬しあいながら、静かに深く進行していく。

そしてある日、偶然目撃した異文化出身の人間(外国人)から、
それがすごいものであることを知らされる。
ほとんどの日本人はその日が来るまで、自分たちが作り上げた物がすごいものとは知らない。
もろもろの伝統文化、芸能、電化製品、アニメ、他、みんな同じパターンで世界に広まっていった。
だから、日本がここまで発展してきたのも必然的なものだし、
この精神が衰えない限り、これからも日本は誰に頼まれることもなく、
知らないうちに勝手に世界にインパクトを与え続けていくだろうと。
0718nobodyさん2009/07/17(金) 11:19:51ID:???
チーム世耕、B層へのラーニング、乙
0719nobodyさん2009/07/17(金) 19:20:40ID:???
rubyもcgiで使えば良いだけの話。
0720nobodyさん2009/07/17(金) 20:55:05ID:???
> 3. PerlやPHPではでかいフレームワークつかわないから軽いだけ
そうだよな。
CGIでもまともに動く軽量フレムワがあればいい。
0721nobodyさん2009/07/17(金) 22:00:28ID:???
one night
0722nobodyさん2009/07/20(月) 17:22:47ID:???
少し質問させてください。

request.remote_ip などrequestの情報をコントローラーではなく、モデルから取得したいのですが、
どうしたものでしょうか?
コントローラー側から、引数で渡すしかないでしょうか?

モデル側からコントローラーのインスタンスにアクセスする手段がある?とか(そうするとテストがやっかいそうですが…)

Rails 2.3.2です。
0723nobodyさん2009/07/20(月) 17:28:07ID:???
>>720
それはありますよね。今だとSinatraでしょうか?

そもそも、Railsと比べるべきは、PerlやPHPなどの言語ではなく、フレームワークですよね
CakePHPとか十分重いですよね。もちろん、Railsよりもデプロイ等楽ですが、
無料レンサバのphpはCGI版という現実…

無料レンサバでRails動かしたいという人は、passengerついてるDreamhostのお試し期間で試してみたら、どうかな
Dreamhostも共有サーバーだけど、なかなかなしんどさで無料鯖でRailsやりたいという願望の非現実感が味わえますw
0724nobodyさん2009/07/20(月) 17:46:00ID:???
おれもRuby会議でシナトラ知ってこれかも。と思ったところ。
0725nobodyさん2009/07/20(月) 18:25:13ID:???
>>722
引数で渡すのが一番簡単だと思う。
あるいは、ApplicationControllerあたりでグローバル変数にrequestをセットするbefore_filterを定義とか。

0726nobodyさん2009/07/21(火) 02:59:52ID:???
けっこうRuby会議行っている人いるんだな。
おれも3日間いったが。

Javaから転校してきてまだ3ヶ月なんだけど、
Rails→超有名
Sinatra→次に有名、もはや珍しくない

まではわかったけど、ほかにも有名なものってあるの?
Java だと web フレームワークはたくさんあって選ぶのに困るぐらいだけど
(もちろん、フレームワークによって得意とする局面はいろいろあるけど)、
Ruby の web フレームワークもそんな状況なのか、
それとも Rail と Sinatra ぐらいなのか?

とりあえず merb と ramaze はRuby会議で知った。
0727nobodyさん2009/07/21(火) 05:47:32ID:???
>>711
板違いで申し訳ないんですが、以前から疑問に思っていたので便乗します。

> TomcatはTomcat上でのマルチユーザー(Not UnixUser)に
> 十分対応している。

というのは、tomcat-users.xmlで管理するという意味ですか?

だとするならば、それはUnixユーザー並みに、ユーザーごとに分離独立で
管理できるのですか?

それから、

> javaでは何でも出来てしまうから「共有サーバー」で導入しないだけ。

ということは、例えば、webapps下の別ユーザーが管理するアプリの
ディレクトリ下を書き換えたりできてしまう可能性がある、
ということですか?

上記等から、レンタルサーバ屋さんは基本的に1ユーザ1Tomcatであるべき、
と考えているということなんですか?
0728nobodyさん2009/07/21(火) 15:42:40ID:rQ1yXsK1
お聞きしたいことがあるのですが、
とあるテーブルのidが求められていた場合、
ある条件下(例えばデータ生成順)においてそのidのデータが何番目にあるのか?というのを求める方法はないものでしょうか?
また、ActiveRecordでそれはどのように書いたものでしょうか?

例えば、id=1234が :order => "created_at asc" という条件で検索した場合に何番目なのか?という話です。

Rails 2.3です。
0729nobodyさん2009/07/21(火) 17:45:21ID:???
>>728
ttp://codezine.jp/article/detail/460?p=2 を参考にすると、
1 + Model.count(:conditions => [ 'created_at < ?', Model.find(1234).created_at ])
だろうか。該当の値より小さい要素の数プラス1(先頭を1とする場合)
0730nobodyさん2009/07/21(火) 22:41:56ID:fpo5xh0M
>>729
ありがとうございます。

created_atが同じ場合に問題が出そうです…。

とりあえず、こんな風に書いてみました。かなり富豪的ですが、アクセスは少ないのでいけるかな?

item_id = 1234
item_number = Mode.find(:all, :order => "created_at asc", :select => "id").index{|x| x.id == item_id } + 1

穴がないか、心配ではあります。
0731nobodyさん2009/07/21(火) 22:43:48ID:fpo5xh0M
>>730
ですが、いきなり>>730の例は Mode.find(:all で富豪的すぎますが、
実際には、:conditions => ["hoge_id", hoge] みたいに、要素を絞って使ってますです。
0732nobodyさん2009/07/21(火) 22:44:29ID:fpo5xh0M
ヽ(`Д´)ノ ウワァァン!!ミスばっかりだよ
x :conditions => ["hoge_id", hoge]
o :conditions => ["hoge_id = ?", hoge]
0733nobodyさん2009/07/21(火) 22:49:39ID:???
値が同じなら、ソートしたときその値の集団のどこに位置してるかは
「たまたまそうなった」以上の意味はない気がする。
最後尾の位置は、比較を <= にして +1 なしにすれば求められるな。


0734nobodyさん2009/07/21(火) 22:53:59ID:???
まあ、理想を言えばSQLのテーブルは、「表」というより「集合」
だからな。順序という概念はあまり相性がよろしくない。
ORDER BYは列の整列というより取り出し順だし。
0735nobodyさん2009/07/22(水) 18:51:56ID:???
RailsでGoogle Mapsを利用するには何が良いのでしょう?
何となくYM4R/GMが良い気がしますが、ほかに何かある?
0736nobodyさん2009/07/22(水) 19:27:20ID:???
ok
0737nobodyさん2009/07/24(金) 00:02:40ID:???
gettextを利用すると、ビューでヘルパーメソッド(number_to_currency)
が機能しなくなりました。

gettextは利用しないほうがいいんですかね?
対応策があれば教えてください。

[環境]
rails 2.3.2
ruby 1.8.6-p287
Ruby-GetText-Package-2.0.4
0738nobodyさん2009/07/24(金) 01:28:01ID:???
試してみたが確かに整形されないな。
script/console
>> helper.number_to_currency(1000)
=> "$10,000.00"
にはなるのだが……

number_to_currencyのようなヘルパはRails標準のI18nフレームワーク
を利用しているので相性が悪いとは思う。

gettext的にはビュー上は
<%=h(_('$%.2d') % price) %>
のように出力しておき、日本語なら '%d円' になるようにメッセージ
カタログを用意するのだろうね。
0739nobodyさん2009/07/24(金) 01:29:34ID:???
1000→10000
適当に脳内修正よろ。
0740nobodyさん2009/07/24(金) 02:03:33ID:???
>>738
ありがとうございます

う〜ん。悩みますね。
まぁ仕事で利用しているわけではないんで、
色々試してみます。ありがとうございました。
0741nobodyさん2009/07/24(金) 02:13:28ID:???
URL引数で ?lang=en のように明示してやると表示出来た。
ということはきちんと初期化しれやればうまくいくはず……

0742nobodyさん2009/07/24(金) 02:42:21ID:???
アプリ作成
$ rails _2.3.2_ testapp

適当なモデルを作ってレコードを作成。
$ ./script/generate scaffold Book title:string author:string price:integer
$ rake db:migrate
$ ./script/console
>> Book.create(:title => 'Untitled', :author => 'Anonymous', :price => 10000)

number_to_currencyを利用
$ vi app/views/books/show.html.erb
<%=h number_to_currency(@book.price) %>

GetTextの使用
$ vi config/environment.rb
config.gem 'locale'
config.gem 'locale_rails'
config.gem 'gettext'
config.gem 'gettext_activerecord'
config.gem 'gettext_rails'

I18n FWの初期化
$ vi config/initializers/locale.rb
I18n.supported_locales = %w(en)
I18n.default_locale = 'en'

でフォーマット出来た。
0743nobodyさん2009/07/24(金) 02:55:25ID:???
>>742

おお〜〜〜!!

やってみたら私もフォーマットできました。
これでgettextと併用できます。
ありがとうございます。
0744nobodyさん2009/07/24(金) 06:22:36ID:???
国際化というかメッセージの日本語化は、やっぱりgettextをみんな使ってるのかな?
自分の場合は、i18nのほうが分かりやすいと思ってるので、i18n_generatorsでymlを生成してます。

0745nobodyさん2009/07/26(日) 09:25:57ID:VPPSkKB9
ちょっと聞きたいんだけど、お前らのところでこれどのくらいかかりますか。
(Windowsスレでレスもらえなかったのでこっち着ました)

$ time script/runner "puts 'hello'"

hello

real 0m16.309s
user 0m0.015s
sys 0m0.015s

$ time script/runner "puts 'hello'"
hello

real 0m12.124s
user 0m0.000s
sys 0m0.030s

環境:Windows Vista SP2, Ruby 1.8.7 Rail 2.3.2, CPU Core 2 Quad Q6600, Memory 2GB
0746nobodyさん2009/07/26(日) 10:05:05ID:???
下げ忘れスマソ
0747nobodyさん2009/07/26(日) 15:17:17ID:???
レスもらえなかったのは聞く場所間違えてるからだろ
っつかマルチすな
http://pc12.2ch.net/test/read.cgi/tech/1216829388/
0748もうだめ2009/07/27(月) 19:48:09ID:???
#rake db:migrate
rake aborted!
Multiple migrations have the name CreateBooks
#rake
/usr/local/bin/ruby -I"lib:test" "/usr/local/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake/rake_test_loader.rb"
/usr/local/bin/ruby -I"lib:test" "/usr/local/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake/rake_test_loader.rb"
Errors running test:units!
てな状況なんですが、ヒントくれませんかー?mysql ruby gems rails は最新verです
0749nobodyさん2009/07/27(月) 21:18:52ID:???
>>748

>Multiple migrations have the name CreateBooks
読める?

Migration classの名前を重複しないようにする。
おおかた XXXX_create_books.rb をコピーして、クラス名を変えずに
中身だけ変えたんだろう。
0750もうだめ2009/07/27(月) 22:09:13ID:???

>>749 ありがとう。素人には難しいね
今、全部アンインストールしてやり直してるところだから
後でまたやってみるよ
0751もうだめ2009/07/27(月) 23:27:06ID:???
できた!
ありがとう
0752nobodyさん2009/07/28(火) 06:15:55ID:???
なにかちゃんと一冊ror本読んで基礎から積み上げたほうが良いよ。
0753nobodyさん2009/07/28(火) 10:35:53ID:???
>>747
すまない。マルチするつもりはなかったんだ。一言向こうに書くつもりだった。すまなかった。
0754nobodyさん2009/07/28(火) 10:44:07ID:???
Authlogic と acl9の組み合わせでログイン認証と権限管理やっている人いませんか?


Authlogicは大体↓exampleとか見て、大体組み込めたんですけど、
binarylogic's authlogic_example at master - GitHub
http://github.com/binarylogic/authlogic_example/tree/master


acl9のチュートリアルで詰まってます。
Tutorial: securing a controller - acl9 - GitHub
http://wiki.github.com/be9/acl9/tutorial-securing-a-controller


Third step: here comes the adminのところなんですが、
Userモデルにacts_as_authorization_object入れるという話なのですが、
↓こちらではSubject modelでacts_as_authorization_subjectを書くとかなっててどっちなの?という。
http://github.com/be9/acl9/tree/master

それと、結合テーブル作らないといけないみたいなのんですが、
migrationするroles_usersはモデルも作る必要あるんでしょうか?

そもそも、結合テーブル何で必要なのかわかってなかったりしますが…。
0755nobodyさん2009/07/31(金) 16:31:29ID:???
現在 routes.rb に以下のような定義をしています

map.resources :payments
map.connect ':controller/:action'
map.connect ':controller/:action/:id'
map.connect ':controller/:action/:id.:format'

この場合、例えば http://localhost:3001/payments/list を GET でアクセスできないのでしょうか?

Couldn't find Payment with ID=list

というエラーがでます。

http://localhost:3001/payments/list/0

とやればアクセスできるようです。
0756nobodyさん2009/07/31(金) 17:43:03ID:???
>>755
rake routes
0757nobodyさん2009/07/31(金) 17:43:49ID:???
map.resources :payments
で定義されるルーティングが先にマッチするからでしょう。

rake routes でルーティングを確認しましたか?
07587552009/07/31(金) 18:15:37ID:???
>>756,757

ありがとうございます。
rake routes の結果より

payment GET /payments/:id(.:format) {:controller=>"payments", :action=>"show"}

が優先的にきいてるようです。

:action => "list" が存在しない場合だけ上記が適用されるようにしたいのですが、可能でしょうか?
0759nobodyさん2009/07/31(金) 18:28:39ID:???
 :action => "list" が存在しない場合だけ
の意味がよくわかりませんが、

map.resources :payments
より前に
map.connect '/payments/list' { :controller => "payments", :action => 'list' }
を書くというのが、やりたいことじゃないかと思います。
controller が payments だけじゃなくて、しかも list メソッドが定義されていない場合は
マッチしないでくれ、という場合は…
:id のフォーマットを正規表現で限定する機能が使えるかもしれません。
07607542009/07/31(金) 18:39:13ID:???
いろいろやってたら、Authlogicとacl9で上手く行きました!

> ↓こちらではSubject modelでacts_as_authorization_subjectを書くとかなっててどっちなの?という。

メインの関連するモデル(Authlogicの場合User)は acts_as_authorization_subject の方でいいみたいです。


> それと、結合テーブル作らないといけないみたいなのんですが、
> migrationするroles_usersはモデルも作る必要あるんでしょうか?

必要なかったです。

lib/ruby/gems/1.8/gems/be9-acl9-0.10.0/lib/acl9/model_extensions.rb などを見ればわかるのですが、
acts_as_authorization_subject で、
 has_and_belongs_to_many :roles, :class_name => role
を呼んでおり、(Authlogicの場合)UserとRoleを多対多で関連付けているみたいです。

しかし、この多対多のhas_and_belongs_to_many ですが、下記サイトを見ると
Ruby on Rails - ActiveRecord - ? ありえるえりあ
http://dev.ariel-networks.com/articles/workshop/rails-activerecord

> * has_and_belongs_to_many (HABTM)
> :through 登場以降の存在がいまいち不明なので無視します。

とかあるのですが、これって今は使わないんでしょうかね。


とにかく、おさわがせしました。
ありがとうございました。
0761nobodyさん2009/07/31(金) 19:15:26ID:???
使えないわけではないが、いろいろ扱いが面倒。
has_many :throughだと、テーブルの関連自体をオブジェクトとして
扱えるので何かと便利。
0762nobodyさん2009/07/31(金) 20:33:56ID:TkoSwHP8
>755の貼ってるURLクリックしたら画面が表示されてびっくりした。
paymentsって結構一般的なんかな。
07637552009/07/31(金) 22:15:57ID:???
> 759
やはりそうするしかないですね
ありがとうございます
0764nobodyさん2009/08/03(月) 08:55:54ID:OSViAr5u
質問です。
クッキーストアなセッションを盗聴もしくはXSSによって盗まれた場合、
そのセッションを無効にするには secret を再生成するしかないという理解なのですが、
あってますでしょうか?
0765nobodyさん2009/08/03(月) 10:49:14ID:???
無効にしても、再びxssで正規セッションから誘導出来るので根本対策に成らないと思うが。盗聴も同じ。また盗聴されれば(ry

番号札取られて順番待ちに横入りされまくってる状況をなんとかしないと。
0766nobodyさん2009/08/03(月) 11:03:10ID:???
>>764
そのセッションをと書いてあるだろ。xss気づいた時点で直すだろう。ただ直しても過去のセッションは生きてるから、過去のセッションを無効にしたいってことだろ。そもそも偉そうに言う前に答えてからにしろ。

で、答えは、私も解らん。
もちろんsecret変えれば、無効になるが、それ以外にないかって言われると…。
07677642009/08/03(月) 11:50:48ID:???
>>765, 766
レスありがとうございます。

secret を再生成するとログイン中のユーザーを強制ログアウトしてしまうので、
それ以外の方法はないのかなーと思いまして。

そもそもクッキーが盗まれないようにしろよって話なんですが
07687642009/08/03(月) 12:03:13ID:???
クッキーが盗まれないようにするには、

XSS に対して => アプリ側で穴をふさぐ
盗聴に対して => 通信内容の暗号化 => 全面的にHTTPS

ということになると思うんですが、世の中見渡しても全面的にHTTPS な
Webサービスって少ないですよね。これって

そこまでせんでもええやろ

ってことなんでしょうか?

なんだか XSS に対してはやたらうるさく言われる割に、
盗聴されるとクッキー盗まれるからHTTPSにしなさいってのは(XSSと同じ被害が出る割に)
随分とトーンが弱い気がします。
0769nobodyさん2009/08/03(月) 12:40:19ID:???
Https だと web サーバに負荷が掛かるからでしょ
アクセス数が超多い人気サイトだと、SSLアクセラレータを前に置いたりするが、
それでも処理が捌けなかったり、そもそもそんな金があるなら別のところに使いたい。

携帯サイトだと、毎回 Https のダイアログがあるのは嫌われる。
07707642009/08/03(月) 13:01:19ID:???
>>769
> Https だと web サーバに負荷が掛かる
> 携帯サイトだと、毎回 Https のダイアログがあるのは嫌われる。

お金や個人情報を扱うクリティカルな処理でない限り
コスト・利便性が優先ってことでしょうか。

その辺のバランス感覚がよくわからんす。
盗聴のリスクを過大評価してるんですかね?>自分
07717692009/08/03(月) 13:07:16ID:???
>>770
> お金や個人情報を扱うクリティカルな処理でない限り
> コスト・利便性が優先ってことでしょうか。

まさにバランスだが、そこら辺は難しい。

どこかのセミナーで聞いたけど、セッションハイジャックがおきても、
本当に致命的な情報は盗まれないように設計すべき、というのを聞いた。

たとえばヤフー(さらにたとえればヤフオク)は、入札する直前に、もう一度パスワードを入力させる。
パスワード変更画面へアクセスするときにもパスワードを入力させる。

つまり、攻撃者がクッキーを盗んでセッションに入り込んだら、何でも出来てしまうようではダメ
(ユーザの情報を、何でもセッションに入れてしまうようではだめ)ということ。

ちゃんと考えられたサイトでは、ログインとか決済画面は Https で包んでいても、そうでない画面は
Http だったりする。
07727642009/08/03(月) 13:43:20ID:???
>>771
> ちゃんと考えられたサイトでは、ログインとか決済画面は Https で包んでいても、
> そうでない画面は Http だったりする。

自分が利用しているサービスは大抵そうなってますね。
そのことは実は前から気になってて、いくらログインが https でもこれじゃ
セッション乗っ取られるやんと思ってたのですが、これって仮にセッションが
乗っ取られても(被害0という訳ではないけれども致命的という訳でもない)
なんとかフェールセーフだからこうしますってことなんですね。

なんつーか、そういうもんなんですね、世の Webサービスというのは。
勉強になりましたっす。
07737642009/08/03(月) 14:37:17ID:???
>>764
> クッキーストアなセッションを盗聴もしくはXSSによって盗まれた場合、
> そのセッションを無効にするには secret を再生成するしかないという理解なのですが、
> あってますでしょうか?

自己レス
ログインの度に更新されるトークンをユーザーのモデル属性に追加して、
それをセッションハッシュに含めるようにすれば、例えセッションクッキーを盗まれても
正規ユーザーのログインと同時に無効にできますね。
0774nobodyさん2009/08/04(火) 00:02:32ID:???
クッキー総当たりもあるしなあ。盗まなくても全部試せばってのもある。

正規ユーザのログインを阻害しておけば、いつまでも取得したクッキーで成り済ませるというのもどうかと。
07757642009/08/04(火) 00:18:20ID:???
>>774
> 正規ユーザのログインを阻害しておけば、いつまでも取得したクッキーで成り済ませる

パスワードとメールアドレスの変更さえ阻止できれば正規ユーザーのログインが
阻害されるということはないという認識なんですけど、この場合のログインの阻害とは
物理的にログインできない状態にさせるということですか?

つまり、クッキーを盗んだ犯人が正規ユーザーの知り合いかなんかで、言葉巧みに
しばらくそのサービスにログインしないように仕向けるとか
0776nobodyさん2009/08/04(火) 01:10:30ID:???
>>774がめちゃくちゃすぎてワロタw
0777nobodyさん2009/08/04(火) 16:17:56ID:???
ActionController::HttpAuthentication::Digest でDigest認証をする場合、
functional test はどうやればいいの?
0778nobodyさん2009/08/04(火) 17:45:14ID:???
プラグインが動いたとき、いつも「おーすげー」といってしまう
07797552009/08/05(水) 00:30:31ID:???
select("foo", "bar", {1 => 1, 2 => 2, ....., 20 => 20})
と、数字を20まで表示させたいのですが、ループなどを組んで指定するにはどうやったらいいのでしょうか?
0780nobodyさん2009/08/05(水) 00:50:11ID:???
>>779
opts = {}
(1..20).each {|i| opts[i] = i }

みたいな感じでハッシュを作ってそれを select に渡したら?
■ このスレッドは過去ログ倉庫に格納されています