トップページ⇒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
0002nobodyさん2009/04/30(木) 23:09:01ID:???
■変遷
【Agile】Ruby on rails相談所【DRY】
http://pc8.2ch.net/test/read.cgi/php/1118663500/
【Agile】Ruby on rails相談所 part2【DRY】
http://pc10.2ch.net/test/read.cgi/php/1151254378/
【Ruby】Ruby on Rails Part3
http://pc11.2ch.net/test/read.cgi/php/1170760209/

↓ム板に

Ruby on Rails
http://pc11.2ch.net/test/read.cgi/tech/1191381506/

↓

Ruby on Rails のスレ が
http://pc11.2ch.net/test/read.cgi/php/1207425569/
↓
イマココ

0003nobodyさん2009/04/30(木) 23:10:32ID:???
次スレ

【Ruby】Ruby on Rails Part7
http://pc11.2ch.net/test/read.cgi/php/1241100447/
000432009/04/30(木) 23:15:06ID:???
>>3は誤爆です、失礼
0005nobodyさん2009/04/30(木) 23:35:01ID:???
>>1のつづき

現在、RubyはPHPが支配する世界の陰で細々と生活しております
表向きはPHPerで、裏でせっせとrubyっていましょう
0006nobodyさん2009/05/01(金) 01:43:12ID:???
たまにはperlのことも思い出してあげてください
0007nobodyさん2009/05/01(金) 01:43:53ID:???
無理です
0008nobodyさん2009/05/01(金) 21:03:58ID:???
これって、サーバーのroot権限不要で
動作させられるようにならないの?

cakephpはできてるよね?
0009nobodyさん2009/05/01(金) 21:18:21ID:???
お前は何をいってるんだ
0010nobodyさん2009/05/01(金) 21:21:52ID:???
これってさー
サーバーの管理権限がないと
動作が遅すぎて重すぎて、
まともに動かせないんだよね?
0011nobodyさん2009/05/01(金) 21:39:51ID:???
rails対応謳ってる所でも無い限りそう
0012nobodyさん2009/05/01(金) 23:34:29ID:???
cakephpってさ、
サーバーの管理権限なくても
まともなスピードで動くんだよね?
0013nobodyさん2009/05/01(金) 23:41:46ID:???
それはCakePHPのスレで訊いた方がいいんでないかい?
0014nobodyさん2009/05/01(金) 23:43:12ID:???
重い重いと言われ心配したがサクサクじゃん。
これでダメって、最低1日2〜30万PVはあるんだろうな。
0015nobodyさん2009/05/01(金) 23:44:53ID:???
>>12
お前は何を言っているんだ
0016nobodyさん2009/05/02(土) 15:23:45ID:???
共有鯖とか元々重い所で動かそうとしてるだけだろう。
0017nobodyさん2009/05/02(土) 17:02:26ID:???
共有鯖ってfast_cgi使えないことないか?
俺は趣味アプリが完成したらさくらインターネットの専用サーバ借りる予定。
月8,000円くらいだったかな。

0018nobodyさん2009/05/02(土) 18:07:46ID:???
共有鯖で使えるところはみかけるけど、ちょっと負荷かけるとダメポになるとかそんなんばっかだ
0019nobodyさん2009/05/02(土) 21:12:12ID:???
なんでcakephpは管理者権限ないところでも
十分なスピードで動くのに、
ruby on railshs動かないの?
0020nobodyさん2009/05/02(土) 22:39:50ID:???
膨大な量のクラスをロードするから起動に時間がかかる。
一度ロードしてしまえばそれなりに動くが、単純なCGIではそうもいかない。
0021nobodyさん2009/05/02(土) 22:55:09ID:???
管理者権限があるサーバーでは
なぜ動作が速くなるの?
0022nobodyさん2009/05/02(土) 23:47:51ID:???
「管理者権限があるサーバー」ってVPSのこと言ってるのだろうか
聞き方があまりにも幼稚すぎて答える気にならんな
社会性のかけらも感じられない
0023nobodyさん2009/05/02(土) 23:55:00ID:???
痛いところを突かれるとしどろもどろになるなんて、
子供みたいでカワイイ
0024nobodyさん2009/05/03(日) 00:06:05ID:rx1Rm2aS
はやくrails3こないかなー
0025nobodyさん2009/05/03(日) 00:11:51ID:???
GWで変なのがわいてきた・・・
0026nobodyさん2009/05/03(日) 02:38:45ID:???
rails楽しいな〜。
GW中開発三昧だ〜。
0027nobodyさん2009/05/03(日) 02:50:14ID:???
さくらのサーバー安いなと思って調べたら、
回線を太くするととたんに高くなるんだな。
10MだったらVPSでも問題ないだろうし微妙だと思った。
0028nobodyさん2009/05/03(日) 06:18:26ID:???
>>19
CGI駆動だとRailsはメチャメチャ重いからだろ

PHPが標準のモジュール駆動だと重いといわれるCakePHPもそこそこ動く
だが、共有レンタルサーバーの多くはphpもCGI駆動だから気をつけれ

Railsをまともn動かす時は、Passengerとか使うのでそうなると、
多くの共有サーバーは入ってないので、管理者権限いるってこと。

ただ、まともにサービスしようとしたら、いろいろ弄る必要があるから、
結局管理者権限ないと話にならんが
0029nobodyさん2009/05/03(日) 07:54:16ID:???
既に回答を貰っているのにそれが理解できずに勝った気になるって痛いな。

0030nobodyさん2009/05/03(日) 10:29:22ID:???
>>19
日本語でおk
0031nobodyさん2009/05/03(日) 14:31:36ID:???
>>27
VPS安いな〜。VPSにしようかな。
0032nobodyさん2009/05/03(日) 14:37:31ID:C26VReX1
VPSでも国内だと高いけどね。
0033nobodyさん2009/05/03(日) 16:53:21ID:???
VPSで2000円くらいのやつ使ってる。たぶん国内だと一番安いくらいかな。
海外だともっと安いのがあるのかもしれないけど、おれは満足してるよ。
ブラウザベースの管理アプリも用意されてて割と便利だし。
0034nobodyさん2009/05/03(日) 21:33:23ID:???
>>33
plz
0035nobodyさん2009/05/03(日) 23:13:01ID:???
プリーズってなにを?plzって初めて見たからぐぐってしまった。
0036nobodyさん2009/05/03(日) 23:30:06ID:???
おそらく、このplzはkwskと翻訳すればいいのではないかと。
0037nobodyさん2009/05/04(月) 00:47:10ID:???
adminってコントローラ作って、管理者が全てのテーブルをメンテナンス
できるような設計にしようと思ってるんだけど、rails的にどうなの?

一般利用者はほとんどのテーブルに対して参照ばっかりだから、
それぞれのコントローラのupdateやdelete、insertを発行するメソッドは
管理者のみ、っていう方法もあるんだけど、どうしたらいいんかな〜。
0038nobodyさん2009/05/04(月) 02:55:49ID:???
adminコントローラ1個だとごちゃごちゃするから
admin/userとか階層作って管理する方法を自分は採用してる。
0039nobodyさん2009/05/04(月) 03:25:03ID:???
>>38
管理用コントローラに、メソッドを追加するっていうこと?
0040382009/05/04(月) 10:34:22ID:MqCVRAIX
>>39
Admin::UserControllerを 作ってlistやdeleteアクションを定義する感じ。
0041nobodyさん2009/05/04(月) 22:11:00ID:???
>>40
ありがとう。37です。
あんま想像つかないけど、そんな方法があるのか。

結局自分は、コントローラとモデルとテーブルを1:1:1になるよう用意することにして、
(コントローラは増えることもあるけど)
各コントローラの参照系以外のメソッドに管理者認証を求めるフィルタを設定した。
0042nobodyさん2009/05/07(木) 15:29:56ID:6IKl0wLq
すいません質問させてください。
カラムがid, user_id, name
のテーブルがあったとして、それのActiveRecord::Baseの継承クラスのインスタンス5つが配列aに格納されているとします。
この配列aの中に、user_idが5であるインスタンスがあった場合それを取り出し、なかった場合nilかfalseを返すような処理を書きたいのですが、どう書くのが一番スマートでしょうか??
ご教示頂けると幸いですm(_ _)m
0043nobodyさん2009/05/07(木) 18:47:11ID:???
>42
まず、あなたなりに書いたらどうなるの?
その後教えてあげます。
0044nobodyさん2009/05/07(木) 21:22:30ID:???
>>42
既にふつうの(=ARのHasManyProxyなどでない)配列になっているっ
てことだよな?
Enumerable#find / detectでも好きに使えばいいじゃん。

0045422009/05/08(金) 00:27:37ID:XobVG3ns
>>44
ありがとうございます!
findの使い方よくわかっていませんでした。。
0046nobodyさん2009/05/09(土) 07:16:53ID:???
>>41
コントローラはnamespace使って管理側とユーザ側で分けた方がよいね
script/generate controller admin::users

routes.rbもnamespace使える
map.namespace(:admin) do |admin|
admin.resources :users
end

0047nobodyさん2009/05/09(土) 07:27:31ID:???
:butyo とか :tanto とか :baito とかもあると統制上便利。
0048nobodyさん2009/05/10(日) 16:27:57ID:???
>>46-47
なるほど・・・。
名前空間でコントローラを整理できることを知らなかった。
ありがとう!

一般ユーザと会員ユーザ、システム管理者からなるシステムを作っているのだけど、
作り直そうか迷うなぁ。

わけた方がすっきりするんだろうけど、一般ユーザと会員ユーザの出来ることは
ほとんど同じなんだよなぁ。
0049nobodyさん2009/05/10(日) 16:38:53ID:???
今すぐに作り直す必要はないと思うよ。
長く運用してると、機能追加などで次第に一般ユーザと会員ユーザの違いが
大きくなっていくので、そのときに整理し直してもいいと思う。
0050nobodyさん2009/05/10(日) 22:14:49ID:???
むしろ意味的・機能的に全く別物でない限り、一般ユーザと会員ユーザはコントローラ分けないほうがいい場合もある
システムごと分離するか、コントローラを分割するか、ユーザのrole機能で対応するかは適材適所やね
0051nobodyさん2009/05/11(月) 00:35:14ID:???
一括だとロールに突っ込めると便利だけど、ロールの使い方知らないと涙目。
0052nobodyさん2009/05/11(月) 21:33:11ID:???
>>49-50
とりあえずそうしてみる。

何回か組んで失敗しないと、理想的なrailsプログラムは組めないと感じた。
0053nobodyさん2009/05/11(月) 23:14:24ID:2slawtRU
Rails + rspec + rspec-rails で開発しています。
Rails 2.1.1 / rspec 1.1.12 / rspec-rails 1.1.12

spec ファイルにおいて、 fixture のデータがロードされたり消されたりする
タイミングがわかりません。

hoges テーブルに対する Hoge というモデルの spec ファイルを作っていて、
以下のようになっています。

describe "○ができること...01"
 fixtures :hoge

 it "A..." do
 end
end

describe "○ができること...02"
 fixtures :hoge_for_some_cases

 it "B..." do
 end
 it "C..." do
 end
end

describe "○ができること...03"
 fixtures :hoge

 it "D..." do
 end
end
0054532009/05/11(月) 23:16:54ID:???
hoges テーブルに対する fixture(ymlファイル) を2種類作っているのですが、
describe "○ができること...02" が走って
fixtures :hoge_for_some_cases がロードされた後、
describe "○ができること...03" の
it "D..." do が動くときに、
fixtures :hoge_for_some_cases で insert されたデータが残っているようです。
これは describe "○ができること...03" で期待する条件とは違うため、テストが失敗します。

○質問1:
fixture によるデータ投入は、spec が起動されるときに一度だけなのか?
fixtures という行を通過する度になるのでしょうか?

# fixtures という行を通過する度に、
# delete from foo と
# hoge.yml の中身の全件 insert が走る?

describe "○ができること...02" のブロックを消し、fixtures :hoge_for_some_cases が動かないようにするれば、
describe "○ができること...01" も
describe "○ができること...03" も動きます。

○質問2:
fixtures :hoge_for_some_cases の中身をfixtures :hoge に書いてしまえばいいのでしょうが、
データ件数が多いため、describe ごとに yml ファイルを分けたいのですが、これは rails 的ではないのでしょうか?

○質問3:
また、ひとつの describe が終わるごとにデータが truncate されるとうれしいのですが、それはどうすればいいのでしょうか?
(これも Rails 的ではない?)

○質問4:
ちなみに spec を実行後に DB の中身を覗くと、レコードが残っているので、これはそういうものみたいですね。
※fixture で投入されたデータのトランザクションと、
 テストメソッドの中で model.save 等で保存されるトランザクションは違う?
0055鉄道教信者{鉄ヲタ(鉄道マニア)}2009/05/12(火) 00:01:43ID:i2JJHx+d
あるレンタル鯖でのトラブル

障害発生期間 :
  2009 年 03 月 06 日

現象 :
 1. 全サービスが使用できない。

原因 :
 ・モデムの電源ケーブルが外れていた。

現在 :
 ・モデムの電源ケーブルを挿し直しました。

hahahaha!
0056nobodyさん2009/05/12(火) 20:34:40ID:???
よくある話
掃除のおばちゃんが掃除機のコンセントがないからと
勝手に電源ケーブル抜いてそのまま忘れて帰るんだよ
0057nobodyさん2009/05/12(火) 20:35:25ID:???
もろひろゆきじゃん
0058nobodyさん2009/05/12(火) 20:36:18ID:8mXS3koF
すいませんちょっとお聞きしたいのですが

if x=='dog'
Dog.find :all
elsif x=='cat'
Cat.find :all
elsif x=='horse'
Horse.find :all
end
0059582009/05/12(火) 20:37:09ID:8mXS3koF
のようなことをしたいんですが、これって一行で書けないでしょうか?
教えて頂けると幸いです。
0060nobodyさん2009/05/12(火) 20:37:20ID:???
fixtureなどさっさと捨ててしまえ
代わりにfactory girlをどうぞ
0061nobodyさん2009/05/12(火) 20:44:51ID:???
一行ったって意味合いが色々あんだろうが

単純に一行にするなら↓
if x == 'dog' then Dog.find :all elsif x == 'cat' then Cat.find:all else Horse.find :all end

モデルに多態性を持たせたいのならSTIかポリモルフィック関連を調べてちょ
0062nobodyさん2009/05/12(火) 20:58:40ID:???
elseとか考えなくて良いなら
x.classify.constantize.find :all
0063nobodyさん2009/05/12(火) 21:02:44ID:???

977 名前:nobodyさん[] 投稿日:2009/04/27(月) 20:17:33 ID:ty2d5Btl
すいません分かりにくかったかもしれないと思ったので書き直します・・

if x='friends'
User.friends
elseif x='pearents'
User.parents
else x='children'
User.childern
end

を一行で書けないか・・みたいな感じです。


978 名前:nobodyさん[sage] 投稿日:2009/04/27(月) 20:24:34 ID:???
User.send(x)

979 名前:nobodyさん[sage] 投稿日:2009/04/27(月) 20:26:28 ID:???
> 977
User.method(x).call

0064582009/05/12(火) 21:04:34ID:8mXS3koF
>>61
>>62
レスありがとうございますm(__)m

>classify.con...
うおぉぉ。。
rubyすごすぎる(笑)
0065nobodyさん2009/05/12(火) 21:18:38ID:???
>>62
xが外部入力だったら超怖い気がするのです…w
フィルタかける方法ないの?
0066nobodyさん2009/05/12(火) 21:29:38ID:???
じゃ、
x.classify.constantize.find(:all) if ["dog", "cat", "horse"].include?(x)
0067nobodyさん2009/05/12(火) 21:36:33ID:???
>>64
ビジネスロジック層で得意げにメタプログラミングを駆使とか絶対やめとけよ・・・
いつか刺されるぞ・・・
0068nobodyさん2009/05/12(火) 21:43:04ID:???
それでソースがすごくすっきりするならいいと思うけど困るときもあるね
「使いたいから使う」みたいなのもたまに見かけるし
0069nobodyさん2009/05/13(水) 05:15:55ID:???
>>50
>ユーザのrole機能
そんな機能があったんかー、しらんかった。pluginかな?
ActiveRecord継承のRoleモデルつくってた。
まだ初めて半年だけど、もう以前の環境(php)には、戻れなウィッシュ。
0070nobodyさん2009/05/13(水) 08:44:50ID:???
単にrole based access controlを実装するという話だと思った。
確かにActiveRbacというプラグインもあるけど。
概念はRails Recipesにも載ってるね。

0071nobodyさん2009/05/16(土) 18:32:34ID:???
よくわかっていない質問ですまないのですが、お聞きください。

こちらのwebベースrailsコンソールのgeneratorプラグインを使ってみようとしているのですが、
eviltrout's kawaii at master - GitHub
http://github.com/eviltrout/kawaii/tree/master


通常のプラグインのインストールのように、

 ruby script/plugin install git://github.com/eviltrout/kawaii.git

とするのではなく、ダウンロードしきて、lib/generatorsに放り込め、とあるのですが、
つまりこれは、lib/generators放り込むところが手動になってしまいます。
こういうのって、上記のようにインストールしただけでgeneratorに組み込めるようなプラグイン側の仕組みってないものでしょうか?

まあ、公式にも別途あるように、一度~/.rails/generatorsにいかに入れとけばいいという話もあるのでしょうが…

kawaii公式のインストール項目抜粋
> 1. Install the Kawaii generator
>
> If you want to generate Kawaii in multiple rails apps:
> Copy the kawaii directory to ~/.rails/generators
>
> To install for one rails app:
> Copy the kawaii directory to your application's lib/generators directory.
> (You might have to create lib/generators yourself.)
0072nobodyさん2009/05/16(土) 18:47:23ID:???
vendor/plugins/プラグイン名/lib/generatorsにファイルがあれば、
generatorとして認識される。
こいつがそういう配置になってないだけ。
0073nobodyさん2009/05/16(土) 23:17:33ID:???
@categories = Category.find(:all, :order => :category)

上記はcategory ascでソートされますが、これをcategory descで
ソートされるようにするのにいい方法はありますでしょうか?
:order => 'category desc' とすれば一応できたのですが、これだと
テーブルのカラム名を直に入力してしまうので、これをやってしまっていいのか迷っています。
よろしくお願いします。
■ このスレッドは過去ログ倉庫に格納されています