トップページ⇒php
993コメント316KB

【Ruby】Ruby on Rails Part3

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん2007/02/06(火) 20:10:09ID:nOZh/PU9
Rubyのweb application frameworkである
Ruby on Railsに関するスレッドです。

<英語>
本家: http://www.rubyonrails.org
API: http://api.rubyonrails.com/
Documents&Tutorials: http://documentation.rubyonrails.com/

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


前スレ
【Agile】Ruby on rails相談所 part2【DRY】
http://pc10.2ch.net/test/read.cgi/php/1151254378/
02432402007/04/20(金) 22:48:25ID:???
>>242
ありがとうございます。

Window > Show View > Other ...
から、各項目を復帰できる事を確認しました。

周りにも、タブを閉じてしまって困っている人がいるので助かりました。
0244nobodyさん2007/04/23(月) 14:22:03ID:???
フォームのセレクトの使い方がわからない。。

<p><label for="user_type">タイプ</label>
<%= select 'user', 'type', [ "タイプ1", "タイプ2", "タイプ3" ] %></p>

とすると、こんなんでます。

TypeError in users#create
Showing app/views/users/_form.rhtml where line #8 raised:

wrong argument type String (expected Module)

どなたかご教授ください。

0245nobodyさん2007/04/23(月) 16:03:10ID:???
ttp://api.rubyonrails.org/classes/ActionView/Helpers/FormOptionsHelper.html#M000506
ttp://api.rubyonrails.org/classes/ActionView/Helpers/FormOptionsHelper.html#M000510
いいか、びっくりすんなよ。なんとその情報はリファレンスマニュアルに実例つきで書いてあるんだ!
02462442007/04/23(月) 17:18:10ID:???
typeカラムがなかったYO!

>>245
びっくりしたYO!
0247nobodyさん2007/04/24(火) 20:18:46ID:???
特定のモデルクラスに対してのみpluralize_table_names=falseを
適用したいと思い、継承したクラス内でクラス変数の設定をしたのですが、
親クラスのクラス変数も上書きされてしまっています…。

↓ソースだとこんな感じです

class Model < ActiveRecord::Base
self.pluralize_table_names = false
end

回避するにはモデルごとにpluralize_table_names変数をセットするしかないのでしょうか…?
どなたか良い解法後存知でしたら教えてください。
0248nobodyさん2007/04/24(火) 22:48:24ID:???
なんでクラス内の変数が
親クラスに影響与え天だよ
スコープが甘いんじゃねーの?
0249nobodyさん2007/04/24(火) 22:58:31ID:cwLWyb36
RadRailsのwebrick立ち上げがメッサ遅いんですけど(WindowsXP)
何でなんだろ・・・
コマンドラインからだと、そこまで遅くないんだけどな
0250nobodyさん2007/04/24(火) 23:49:48ID:???
>>249
mongrelにすれば?
0251nobodyさん2007/04/25(水) 00:59:22ID:???
>>247
class Model < ActiveRecord::Base
def self.pluralize_table_names
false
end
end

>>248
1.9 では親クラスと共有しなくなった。
0252nobodyさん2007/04/25(水) 10:02:52ID:???
>>247
http://capsctrl.que.jp/kdmsnr/wiki/bliki/?ClassInstanceVariable
0253nobodyさん2007/04/25(水) 13:55:01ID:???
Rails1.2でARのObject#idがdeprecatedになってるんだけど、これってもう
実装者からはid触れなくするってことなんかな?
バッチとかでtrancateしてinsertし直す時に困りそうな気がするんだが…。
0254nobodyさん2007/04/25(水) 14:17:42ID:???
>>253
自己レス
warning: Object#id will be deprecated; use Object#object_id

よく嫁よ俺…orz
0255nobodyさん2007/04/25(水) 15:55:33ID:l0yezZx4
RadRailsでWebサイト作ってるんですけど
debugってどうやればいいんでしょう?
サイトをいじりながらデバッグしたいんですけど、
出来ないのかな?
02562442007/04/25(水) 20:29:04ID:???
ラジオボタンのcheckedってどーやんだ。

<%= radio_button 'send', 'type', 'mail' %>aaa
<%= radio_button 'send', 'type', 'login' %>bbb

Rails API ドキュメントむずい・・
0257nobodyさん2007/04/25(水) 21:03:10ID:???
先に
<% send.type = 'mail' %>
と値を設定しておいてやればいいのでは?
0258nobodyさん2007/04/25(水) 21:03:47ID:???
あ、もうちょっと考えて書けばよかった。
<% send.type |= 'mail' %>
の方がいいね。
0259nobodyさん2007/04/25(水) 21:44:07ID:???
>>258

||= と見た。
02602442007/04/25(水) 21:51:46ID:???
<% send.type ||= 'mail' %>
<%= radio_button 'send', 'type', 'mail' %>aaa
<%= radio_button 'send', 'type', 'login' %>bbb

no method name given

だめでし
02612572007/04/25(水) 22:15:50ID:???
>>260
<% @send.type ||= 'mail' %>
です。重ね重ね済まん。
02622442007/04/25(水) 22:56:47ID:???
うーん、
エラーで無くなったけどcheckedにならないですね。

<% @send.type ||= 'mail' %>
<%= radio_button 'send', 'type', 'mail' %>aaa
<%= radio_button 'send', 'type', 'login' %>bbb

だめぽ
0263nobodyさん2007/04/26(木) 08:06:56ID:7y5iCbkB
脆弱性乙
0264nobodyさん2007/04/26(木) 09:48:50ID:???
>>244
単に@send.typeがObject#typeを呼んでるだけなんじゃないの?
method_missing経由でカラム名のアクセサがあるように見せているので、
すでにメソッドがあったり、自分で上書きしたりすればデフォルトのアクセッサは
動かなくなる。
0265nobodyさん2007/04/26(木) 18:39:23ID:???
ARって検索で大量のレコードがHitすると検索結果を全部Arrayに入れようとするので重くなりますよね。
ARでカーソルみたいなRecordSetのような概念はないんでしょうか?

WebアプリだったらそもそもそんなにHitする画面はねーよ、っていう思想なのかな・・
0266nobodyさん2007/04/26(木) 22:44:12ID:???
>>265
いまんとこないですな。
ぐぐるといろいろ工夫してる人がいるみたいですが。

MySQLのid割り当てのしかたを前提にしたちょっとインチキ。
http://weblog.jamisbuck.org/2007/4/6/faking-cursors-in-activerecord

ActiveRecordEnumerable(試作)
http://schuerig.de/michael/blog/index.php/2007/02/03/ar-enumerable/
0267nobodyさん2007/04/26(木) 23:27:48ID:???
すみませんが、質問です。

Railsで、アップロードされたファイルを受信する際に、ファイルのサイズに制
限をつけるにはどうしたらよいのでしょうか?巨大ファイルを送信されたとき
に拒否したいのです。
0268nobodyさん2007/04/28(土) 01:15:37ID:???
初歩的で恐縮ですが、質問です。

ファンクションテストで使う、assins には、メソッドと単なるハッシュの二種
類があるそうですが、この単なるハッシュのスコープは何でしょうか?

単なるローカル変数だとしたら、そのテストメソッドの中のスコープしかあり
ませんから、テストメソッドの実行前に価をセットしておけるはずがないと思
います。不思議です。
0269nobodyさん2007/04/28(土) 06:33:56ID:???
ゆっとることがよくわからんし、assinsがassinsertかassignsかも判然としないけど、
assignsのハッシュはViewのインスタンス変数のハッシュそのものじゃないか。
ソース見てないけど。

>>267
File.size(params[:uploaded_file].local_path) じゃだめかね
直接params[:uploaded_file].sizeでいけたかも。
0270nobodyさん2007/04/28(土) 14:21:10ID:???
CruiseControl.rbってRailsなのね。
0271nobodyさん2007/04/28(土) 14:21:31ID:weHXkhvg
>>265
この現象ってページングの時もですか?
1億件から30行とってくる場合に、1億件ARRAYに入れて30件抽出すると言う事ですか?
0272nobodyさん2007/04/28(土) 14:36:30ID:???
pagination は内部では
find(:all, ...
 :offset => paginator.current.offset, :limit => per_page)
という呼び出しをしているのでだいじょぶ。


0273nobodyさん2007/04/28(土) 15:27:33ID:???
ただ、デフォルトの pagenate は小さいオブジェクトをたくさん作るので、
そこでメモリ食ったり処理速度上のネックになったりはする。
表示する件数がやたら多い場合とかだけどね。
02742712007/04/28(土) 18:50:24ID:weHXkhvg
>>272-273
サンクスです
安心しました
0275nobodyさん2007/05/01(火) 00:45:09ID:???
Rubyって現在運用に向いてるの?
あんまりみたことないし、作者のサイトがPHPなんだけどw
この言語はネタかww
0276nobodyさん2007/05/01(火) 01:32:32ID:???
作者のサイトとは?
0277nobodyさん2007/05/01(火) 01:53:04ID:???
運用ってどんな運用よ?
0278nobodyさん2007/05/01(火) 03:36:54ID:???
つれたつれた
0279nobodyさん2007/05/01(火) 03:41:15ID:???
で、作者のサイトとは?
0280nobodyさん2007/05/01(火) 04:18:42ID:???
PHPのアホ言語仕様に気づかないようなプログラミングセンスのない奴は
所詮何使っても同じだよ
0281nobodyさん2007/05/01(火) 04:20:28ID:???
へえ、たとえばどんな?2〜3例ばかり挙げてもらえる?
0282nobodyさん2007/05/01(火) 05:18:34ID:???
山ほどあるが、一番アホなのは高階関数が使えない事かな。
PHP
function cube($n)
{
return($n * $n * $n);
}

$a = array(1, 2, 3, 4, 5);
$b = array_map("cube", $a);
print_r($b);

Ruby
a = [1, 2, 3, 4, 5]
p a.map {|x| x**3}

実装の多重継承を行う仕組みがないところ
あとは組み込み関数にオブジェクト指向が全然活用されてないところ、
Perlに中途半端に似てるシンタックス
0283nobodyさん2007/05/01(火) 05:30:41ID:???
うーん、だっさーいけどcreate_functionを使えば同等のことができると思うけど。

それを言うならclosureがないのがアホだろう。
0284nobodyさん2007/05/01(火) 05:34:45ID:???
あー、あと実装の多重継承(rubyでいうinclude)がないのには結構悩んだ。
けどこれもなんとかなるんだよね、実は。requireを使えばできる。

組み込み関数にオブジェクト指向が活用されてないのは仕方ないよ。
だって全部がオブジェクトじゃないし、元々の出自が違うもの。
そこは割り引いてあげなきゃ。

Perlに文法似てる? 全然そんなことないと思うけど。
Perlの文法で特徴的なのは文脈で変数の解釈が変わることで、
PHPにはそれがないよ。
0285nobodyさん2007/05/01(火) 05:36:35ID:???
連投すまん。

だからといってPHPがいいとはちっとも思ってない。
アホ言語仕様とまでは思わないけど、
まあ文法はださいけど結構色々できるよってことね。
0286nobodyさん2007/05/01(火) 11:21:05ID:???
Rubyはイテレータが便利で今までFor文とかほとんど書いた事がなかったんですけど、ERBだとFor文を使ってますよね。
AWDwRのサンプルコード見てもそうですし。
これがどうにもRubyぽくない(というかほとんどJSPに見える)ので嫌なんですが、どうにもならないところなんですかねぇ。。。
イテレータ拡張してブロックの評価結果を戻り値で返すって言うのはダメですか?
0287nobodyさん2007/05/01(火) 11:35:23ID:???
単にデフォルトのscaffoldで生成されるテンプレートがforループを使っているだけであって
使いたくないなら使わなければ良いっていうか、好きにすれば良いっていうか...
でもViewで凝ったループを使いたくなることは無いし、forだとだれにでも判り易くていいんじゃない。

表記の好みだけが問題ならどっちでもいいじゃん?
0288nobodyさん2007/05/01(火) 12:02:04ID:???
phpはオブジェクト指向を途中から中途半端に入れたからもう無理だろ
0289nobodyさん2007/05/01(火) 13:54:13ID:???
eachよりもforのほうが軽い。(eachはループごとにブロックスコープを生成するがforはブロックを作らない)
0290nobodyさん2007/05/01(火) 17:54:57ID:???
>>289
それは知らなかった。横で見ていたものだが教えてくれてありがとう。
でもforみたいに新たな文法を導入するよりeachの方が好きなんだよね…。
0291nobodyさん2007/05/01(火) 21:14:34ID:???
>>286
eachで書くことが出来ないと思っているならそれ誤解だから。
0292nobodyさん2007/05/01(火) 21:15:17ID:???
値の検証でmodelに

validates_presence_of :name, :message=>"名前がありませんよ"

みたいにしてるんですけど、カラムが全部未入力の場合だけエラーとしたい場合、
どんなふうにするんでしょ?
0293nobodyさん2007/05/01(火) 21:26:44ID:???
モデルにvalidate というメソッドを定義して好きにチェックする。
レコードとして不正だったら、
errors.add_to_base(エラーを伝えるメッセージ)
という呼び出しをすればOK。
0294nobodyさん2007/05/01(火) 21:27:32ID:???
>>286
これるびまの誰かへのインタビューで
なんか理由が書いてたような記憶あるなー
forとendが対照的で見やすいのもあるんじゃねとかそういう話
別にeachでも全然いいんじゃないの
0295nobodyさん2007/05/01(火) 21:27:57ID:???
追記。

定義したvalidateは必要に応じてフレームワークから呼ばれるので
自分で呼ぶ必要はないです。
02962922007/05/01(火) 21:42:12ID:???
modelに

def validate
if gakunen_id.empty?
validates_presence_of :name, :message=>"名前がありませんよ."
end
end

とすると以下のエラーが・・

You have a nil object when you didn't expect it!
You might have expected an instance of Array.
The error occured while evaluating nil.empty?

なぜに。
0297nobodyさん2007/05/01(火) 21:50:04ID:???
よくわからんが霊視して答えてみることにする。

if self.gakunen_id.empty?

でどうだ?
0298nobodyさん2007/05/01(火) 21:51:30ID:???
未初期化なら''じゃなくてnilだから、empty? は呼べない。
blank? 使え。
02992922007/05/01(火) 22:14:29ID:???
blank?やnil?でも同じ感じ。

You have a nil object when you didn't expect it!
You might have expected an instance of Array.
The error occured while evaluating nil.inject

Extracted source (around line #6):

6: <%= collection_select 'seller', 'gakunen_id', @gakunen, 'id', 'gakunen', :include_blank => true %><br>


なぜー
0300nobodyさん2007/05/01(火) 22:21:38ID:???
validateと関係ないじゃねーか!

0301nobodyさん2007/05/01(火) 22:28:19ID:???
collection_selectの3つめの引数は配列でないといけないんだが。
injectでエラーになってるようだが、

collection_select(..., ..., choices...)
=> to_select_tag(choices,...)
=> options_for_select(choices,...)

でchoices(引数としてはcontaienr)に対してinjectが呼ばれる。
ここでエラーになってないか?

0302nobodyさん2007/05/02(水) 02:22:46ID:???
ruby言語仕様がアホすぎてダメだわ。
0303nobodyさん2007/05/02(水) 03:16:56ID:???
kwsk
0304nobodyさん2007/05/02(水) 03:23:00ID:???
なんでrubyの作者のHPでrubyが使われず、phpが使われてるのかおまえらは考えたことがありますか?
0305nobodyさん2007/05/02(水) 04:05:09ID:???
Rubyの言語仕様を理解できない自分がアホだという事には気づかなかっただけ幸せかもね
0306nobodyさん2007/05/02(水) 08:24:11ID:???
Rubyの作者のHPって
matzにっき?(tDiary)
ruby-lang.org?(Radiant=Rails)
0307nobodyさん2007/05/02(水) 08:48:15ID:???
また「釣れた」とか嬉しそうに言うからほっときなよ。
どうせ何もわかっちゃいないんだし。
0308nobodyさん2007/05/02(水) 11:26:38ID:???
matzって最近はPHPの悪口言わなくなったな。大人になったのかな。
0309nobodyさん2007/05/02(水) 12:40:12ID:???
>>308
勝利宣言済
0310nobodyさん2007/05/02(水) 16:46:46ID:???
Model.find(:all, :include => [:foo,:bar], :joins =>[inner join table t on t.foo_id = foo.id])
と言った感じでInner JoinとLeft joinを使い分けていたのですが、パフォーマンスを
調べていたところ、:joinsオプションで指定したテーブルはJoinこそしてくれてはいるものの、select句で
カラムをまったく指定しておらず、無駄になっている事が分かりました。
(結局参照するときにSelect投げなおしている)

んで、じゃあしゃーないと、:selectでカラムを指定してみてもまったく無視されているようで、SQLに反映されません。

ARでinner joinは茨の道なんでしょうか?DHHからの愛を感じません。
0311nobodyさん2007/05/02(水) 19:53:46ID:???
レスありがとうございます-。

>>289
500万回のループを回して処理時間を計ってみたら
forとeachでは0.5〜1秒くらいforの方が早かったです。
そこまで気にしなくてもいい感じですね。

>>290
Σ(゜д゜;)

>>294
<% hoge.each do |v|
foo <%= bar() %>
<% end %>
こんな感じですかね?
言われてみればなんとなく気持ち悪い気もします。
0312nobodyさん2007/05/03(木) 00:05:55ID:n7bcDdTM
Rails Edgeって何なんですか?
Ruby-MLで、重いって言われてたんですけど・・・
0313nobodyさん2007/05/03(木) 01:05:02ID:???
開発の最先端のRailsのこと。
0314nobodyさん2007/05/03(木) 01:16:51ID:???
レールの先端て終点ですか
0315nobodyさん2007/05/03(木) 01:18:01ID:???
コーナーリングのときに車体が浮いて、車輪が引っかかってる部分が
エッジのような気がする。
0316nobodyさん2007/05/03(木) 01:38:43ID:nyRAYwv8
http://www.itmedia.co.jp/enterprise/articles/0705/01/news053.html

犯罪者用フレームワークに選ばれた?
0317nobodyさん2007/05/03(木) 01:47:29ID:???
女性用ってとこがまた似合ってるな
0318nobodyさん2007/05/03(木) 16:30:40ID:???
Rubyはスタイリッシュな女性
Perlはガツガツした現場主義マッチョ
PHPはにちゃんねら
ってイメージだな

0319nobodyさん2007/05/03(木) 18:07:37ID:???
そういやhelperのテストって書いてますか?
基本はviewから呼ばれるものの、ユニットテストとかできそう。
なんだけど機構がないよね。
0320nobodyさん2007/05/04(金) 01:29:45ID:???
>>318
いかにもちゃんねらな発想
0321nobodyさん2007/05/04(金) 02:07:15ID:???
railsで作られた有名なサイトって何がある?
なんか個人が片手間で、しかもRailsじゃなくても簡単に
作れるようなサイトしか表に出てないから、
イマイチ実績がわからん…
0322nobodyさん2007/05/04(金) 03:56:44ID:???
>>321
http://rails100.pbwiki.com/
0323nobodyさん2007/05/04(金) 03:58:23ID:???
http://wiki.rubyonrails.org/rails/pages/RealWorldUsagePage1
0324nobodyさん2007/05/04(金) 08:47:54ID:???
ランダムに眺めてみたけど
なんかデザイン最悪、アクセシビリテ悪し、ってやつが多いなあ・・・
0325nobodyさん2007/05/04(金) 10:04:27ID:DRYOcLVN
>>321
オブジェクト指向スクリプト言語 Ruby
http://www.ruby-lang.org/ja/
0326nobodyさん2007/05/04(金) 10:06:14ID:DRYOcLVN
>>321
>>322にもあるけど、今はやりのSNS(?)twitterがRailsだね。
Twitter: What are you doing?
http://twitter.com/


パフォーマンスあげるのにいろいろ苦心してたみたいだけど。


0327nobodyさん2007/05/04(金) 11:05:10ID:???
美しいサイトを紹介してくれ。
これじゃMVCじゃなくてMCだ。
0328nobodyさん2007/05/04(金) 13:25:54ID:???
MVCという言葉は知ってるらしいが
Vのデザインまでフレームワークが作ってくれると
思ってるのか
0329nobodyさん2007/05/04(金) 13:37:14ID:L0mwz8+Z
>>327
ちょwwww
Rails関係なくない?
0330nobodyさん2007/05/04(金) 13:58:19ID:???
関係あると思うよ。
Vのデザイン開発クオリティを支えるのも含めてMVCのVだよ。
0331nobodyさん2007/05/04(金) 14:10:18ID:???
あのな、MVCモデルってのはプログラム内部の「作り方」の話で、アプリケーションのみてくれや機能とは関係ないんだけど。

で、RailsにDreamweaverやホームページビルダー的なものを期待しているのか?
0332nobodyさん2007/05/04(金) 14:57:30ID:???
まぁ、将来は統合されたような物がでるかもしれないが、
いまはないな
0333nobodyさん2007/05/05(土) 01:34:23ID:???
今はVのデザインもフレームワークがやってくれるじゃん。
rails以外のrails派生フレームワークはscaffoldである程度整ったもん出してくれるし。
もちろん「設定より規約」に従って、そのデフォルトデザイン自体も指定可能だし。
0334nobodyさん2007/05/05(土) 02:21:57ID:???
しかしerbがデザインナーには優しくない訳で・・・。
0335nobodyさん2007/05/05(土) 03:34:46ID:q6FwsdVV
ちゅーか、デザイナにデザインつくって、
コードに落とすのは、マの役目じゃねーのか?

MVCのVっつったて、まさか、HTMLでデザインするとこまで、マがやるわけじゃあるまいに・・・
0336nobodyさん2007/05/05(土) 06:39:53ID:???
スキンやテーマから選択みたいな機能をRailsに実装しろって話?
0337nobodyさん2007/05/05(土) 09:31:19ID:???
普通のHTMLをテンプレートとして利用できるようにしろと。
Dreamwaverなんかでちゃんと見れるHTMLを。

あとさ、scaffoldなら、データベースのフィールドが増えたら
自動的にビューに反映される。
その便利な機能を、独自のテンプレートでも反映させられるようにしろと。

たとえば独自で作ったrhtml内に特殊なタグ<% scaffold %>を書いておけば、
そこがscaffoldで生成したようなフォームになる。
ただし、rhtmlですでに項目を使用しているのならそれは除く。

一度作ったrhtmlそのままで、データベースのフィールドの追加に
追尾できるような仕組みがあるといい。
もちろん追尾した部分のデザインは汚いだろうが、それはあとから直せば良い。
それよりも動作チェックを早くしたい。
0338nobodyさん2007/05/05(土) 09:47:26ID:???
データベース設計からやり直せよ…。
0339nobodyさん2007/05/05(土) 09:52:34ID:???
>>338
DRY原則。やり直すなんてもってのほか。
0340nobodyさん2007/05/05(土) 10:02:57ID:???
何言ってんだ?根本的にデータベース設計が糞なんだろ?初めからやり直せよ。
フィールドが途中で増える様な、仕様すら決定してない段階でV作りこんで、何するつもり?
0341nobodyさん2007/05/05(土) 10:06:57ID:???
Agileでは作ったものに対して仕様追加という作業がなんども発生する。
だから、作ったビューに対して、仕様変更が発生した場合、
それをデータベースに反映させられるといい。

具体的に言えば、ビューにテキストボックスを追加したら、
データベースでもフィールドが追加される。(手動で追加するのではない)
0342nobodyさん2007/05/05(土) 10:10:24ID:???
>>340
最初から仕様を決定するウォーターフロー的な開発は現代に合わない。

アジャイル開発手法においては、開発対象を多数の小さな機能に分割し、
1つの反復 (イテレーション) で1機能を開発する(⇒反復型開発)。 こ
の反復のサイクルを継続して行い、1つずつ機能を追加開発してゆくのである。

おのおのの反復は、小規模なソフトウェア開発プロジェクトに似ている。
各反復では、それまでに開発した成果物に1つの小さな機能を追加する。
計画、要求分析、設計、実装(コーディング)、テスト、文書化といった、
ソフトウェアプロジェクトに要する全ての工程を、1つの反復内で行う。

場合によっては、1つの反復内で開発すると計画していたソフトウェア機能を、
必ずしも期間内で充分に実現できるとは限らない。 このように時にはうまくゆかない反復もあるが、
アジャイル開発手法では、各反復が終了するごとに、機能追加された新しいソフトウェア (ビルド) を
リリースすることを目指す。 各反復が終了するごとに、プロジェクトチームは、
プロジェクトにおける優先度を評価し直す。
■ このスレッドは過去ログ倉庫に格納されています