【Ruby】Ruby on Rails Part6
Railsの簡単なリファクタリング方法教えてくれ
ユニークじゃない処理をPickUp ↓ ライブラリorプラグインを探す |↓ない |最初に戻る ↓ある 置換える ↓ テスト
Railsなら最初にテストを記述じゃないの?直すたびに手動でテストはめんどいよ
>>329 同意。
標準のTestUnitではなくて、最近はRSpecのほうが流行りなのかね。
あ、でも仕事の場合、テスト仕様書とテスト結果表をエクセルで
書かないと納品物として認めない客が多いので、
Railsのテスト(TestUnit/RSpec)に加えて、手動テストが必要だよね。
つまりRSpecの出力フォーマットにエクセル(つーかCSVでいいや)を追加すれば……
おー。なるほどね 線引いたり、フォントとかの体裁はVBAでがんばればいけるかな?
Rspecっていいのけ?使ったことないのだが。
ttp://jp.rubyist.net/magazine/?0021-Rspec を見てみたのだがイマイチ利点がわからん。
----- RSpec とは何か ------------------------------
RSpec とは、公式サイトの説明によれば、
「プログラムの振舞 (behaviour)」を記述するためのドメイン特化言語
(DomainSpecific Language:DSL) を提供するフレームワーク」です。
--------------------------------------------------
これはよく分かった
----- なぜ、RSpec なのか --------------------------
では、なぜ Test::Unit ではなく、RSpec を選ぶのでしょうか。
冒頭の FAQ を再び。 「RSpec って、要は Test::Unit でやっていることを別の書き方にしただけでは?」
――確かにその通りなのですが、その「書き方」が重要だというのが私たちの思いでした。
--------------------------------------------------
なるほどと思った。ところがこのあと、テスト駆動開発の説明が続いて、
--------------------------------------------------
Rspec の狙いはプログラマにテストコードが設計であることを明確に意識させることと、
プログラマがテストコードをスムースに記述し実行できるようになることです。
--------------------------------------------------
みたいな結論になってるのだが、あまり具体性がなくてピンとこない。
だれかわかりやすい利点を具体的にいくつか教えてくれるとうれしいのだが。
ほかにもいくつかサイトを参考にしたのだが、記述方法メインがほとんどだった。
RSpecって、ちょっとさわった程度なんだけど 英語っぽいから、英語圏の人がありがたがる気持ちはわからんでもない 日本人の自分としては?だけどね 使い込むといろいろ便利なのかね?
>>335 なるほど、サンクス。利点の一つがわかった。
DSLは便利なのだが、いくらRubyベースとはいえ何個も覚えたくなかったりする。
もっと利点が挙がってきて魅力を感じるようになったら勉強するよ。
BDDって何だろ,って思って勉強しながら使ってたら いつの間にかTest::Unitよりもなんとなくしっくり来て(慣れたからだと思うけど)使ってる 結局概念的にはあんま理解してないと思うけど,TDDの発展形らしいのでとりあえず満足してる
shoulda
SVNにコミットしたら自動で全部テストして エラーが起きたらメールで通知 rspec&autotestおいしいです^q^ 所で宍道湖つかってる人いる?
しめじ
しじみじゃないのか?
テストはSeleniumでするものです
仕事でやってるけど、テストはRSpecで行った。 やっぱり自動テストできると仕様変更の際とても楽。 色付けて、色で判別できるのも良い。 あと it "日本語" do みたいに書けるので、 テスト走らせた時に半分仕様書っぽく見えるのがgood。 それでもAjaxが絡む部分とかはテストできないので 地道に手動テストしてエビデンスをExcelに貼付けるとかは行った。
いくら自動テストしているからと言っても お客さんにはそれが見えないので、書類として出せるものは必要。 結局Excel登場な訳です。
>>343 >それでもAjaxが絡む部分とかはテストできないので
RSpecなんか使ってるからだよ
Ajax部分は、まぁSeleniumとかの担当になるだろうなぁ。 あと、CIでやるテストと、納品に必要なテストは違うよね。
CI=Continuous Integrationね、一応。
テストは客のためじゃなくて自分のためにするもんだけどな
客に提出するためのテスト資料ってわりといい加減なことが多い気がする 提出したあとにプログラムを変えて、テストは思いっきりおろそかとか で、客の信頼を失ってテスト資料の提出をせまられる
テストを記述&テスト ↓ ユニークじゃない処理をPickUp ↓ ライブラリorプラグインを探す |ある ↓ない | ライブラリorプラグインを作る | ↓作った ↓作らない | テスト記述を追加 最初に戻る ↓ ←こっち 置換える ↓ 最初に戻る
実際にはあんまみんな自動テストしてないんだろうなと思ってる どうせ最低限手動テストも必要だしね このスレに来るような層だとおもしろがってRuby使ってる人が多いだろうし,使ってるだろうけど
自動テストは開発中(特に中盤)の安心感を買うのであって、納品するためのテストとは違うと思た 末にバタバタするとメンテする暇ないしね・・・ 特にしょうもないところまで厳密に書いてたりすると修正だけで結構な手間がかかるので カバレッジ100%とか無意味に目指すのはやめたw
つーかエクセルでテスト結果なんて出されても見ねーよ
テストツールスレからきますた
BDDとTDDの違いがよーわからんす
振る舞い定義開発と、テスト先に書く開発だよね?
結果的にやってること一緒なきがするんだけど
考え方の違いなんかな?
前にるびまの記事(rSpecのかな?)よんだけど、しっくりこない。
参考までに
>>337 のしっくり来た理由を教えて欲しい
rSpec自体は見やすいとか、利点あるけどさ・・・
357 :
nobodyさん :2009/02/13(金) 08:50:59 ID:CNLHag3h
書き方が違うだけでやってる事は同じだよ。 しかし書き方の違いが重要である事をRuby使いはよく理解している。
理解しているというより、無駄に拘ってる感じだな
migrationが微妙
>>359 俺的にはmigration最高だけどな。
微妙っていうなら、migrationよりいい方法知ってるんだよな?
ぜひ教えてくれ。
ガキっぽw
362 :
nobodyさん :2009/02/14(土) 12:14:03 ID:11KlnFuU
結局答えられないんだなw
>>360 かわいそうだからスルーしてやれよ
痛すぎw
なんで小学生がこんなスレに居るの?
359だが、なんか面白い展開になってるなwww
359=361=363=365はmigrationがわかってない小学生でおk?
>>360 Merbのauto-migrateは便利だぜ。
いちいちMigration書くのが馬鹿らしくなる。
商用DBでmigrate使ってるやついる?spliteくらいならいいのだが商用はつらい
商用はないなあ。SQLite、MySQL、PostgreSQL だけだ。
だよな。Oracleあたりだと単に表と言っても何種類もあるし、設定する項目も多い。 結局DBは前もって作ってるわ。
371 :
nobodyさん :2009/02/15(日) 01:14:35 ID:7eK2Kd0p
自分の仕事の範囲だとPostgreSQLとMySQLしかないからmigration便利に使ってるけど、オラクルは事情違うんだね。初めて知ったわ。
>>368 spliteってひょっとしてsqliteのこと?
>>371 違う違う。
多分あなたの仕事の範囲ならOracleでも問題ないわ。
商用非商用じゃなくて、単にそれぞれのDBの機能活用してないだけ。
MysqlでもInnoDBでちょっと凝ったことやろうとするとmigrationじゃとてもとても…
>>373 間違えたw
「splits」って名前のテーブルをいじってたからかな?w
>>374 どんな高度なことがしたいのか知らんけど、executeメソッドでSQL実行すればええやん。
377 :
nobodyさん :2009/02/15(日) 09:00:19 ID:BATHKwrT
>>376 create table のオプション見てみれば、わかると思うよ
設定できる項目の数が全然違うから
#当然そのあたりを考えて設計するわけだが
create tableのオプションは見てないけどexecuteではダメってこと? Railsで対応してないSQL実行したいときは,executeとかつかって自分でメソッド用意するもんだと思ってたけど
>>378 もう許してやれよ
おおかた入門本だけ読んで全てを知った気になっちゃった痛い香具師なんだろ
380 :
368 :2009/02/15(日) 20:46:08 ID:???
railsでやろうと思えばできるんだろうけど、手間がかかりすぎて実用的じゃないような。 オラクルだとおれはDBで分けるんじゃなくてスキーマで分けてるけど、 開発用にでかい領域なんて割り当てないから定義自体が変わってくるし。 DBオブジェクトの定義だけでも軽くSQLで数千行いくし、ストアドプロシージャあたりもrailsで管理とかきつい。
ちょっと文脈は違うが、うちは商用データベースにテーブル作るためには、 開発担当がSQL書いて(あるいは依頼して)、DBMS担当のレビューを受けた上で、 開発の担当部長の決裁と運用の担当部長の決裁を経て、DBMS担当が 作業するから、rake migrateでやるなんてありえない。
382 :
nobodyさん :2009/02/15(日) 21:42:00 ID:7eK2Kd0p
現在どうやっているかという話は参考になったけど、ここRailsスレだからさ。 Railsでどうにかする方法を模索したほうが建設的じゃないか?
DBMS固有の機能なんてそんなに使うか? mysql使ってるけどexecute使ったのなんてvarcharにbinaryつけるときとカラム追加するときに順番を任意にするためafterつけるときと、references張るときぐらいだ
めんどくさいことやってんのな Railsにもいろいろ担当が居そうだ。 モデル担当とか、コントローラ担当とか。
386 :
381 :2009/02/16(月) 01:57:37 ID:???
というか実際には、メインのDBをアプリケーションのDBとしてそのまま 使うことは拒否されるけどね。勘定系の元帳入ってるから、うるさい。 でも、アプリケーションDBも結局DB運用担当の管理下に置かれちゃうんだよな。
Simply Rails 2.0でひととおり流れは分かって、 The Rails Wayを読み始めたんだけど、これRails 1対応ですよね? Rails 2でも根幹の部分は変わりませんか?
388 :
nobodyさん :2009/02/16(月) 07:41:08 ID:XDlCrmen
>>378 rake migrate の話をしているのになんでexecuteが出てくるのかわからんのだが?
アプリケーションが利用するDBユーザにcreate,alter,drop権限なんか 与えるのか、って問題も大きいぞ。必要性がないだろ。
391 :
nobodyさん :2009/02/16(月) 09:05:10 ID:CKJsSrXL
>>388 おかしい事言ってるのはお前のほうだぞ。
migrationで直接SQL実行する事はよくある。
つまりマイグレーションなんてへなちょこスクリプトと同次元の取るに足らない存在で いちいち語るに値しないと言うことですね
機能としてはね。 DBはオブジェクトの永続化目的でしかなく(=ActiveRecord)、 スキーマ操作はフレームワークの管理下においてアプリの一部として扱え(=migration)、 という割り切りが重要。
>>387 基本的なところは同じ。
でも、2.0の本読んだ後に1系の本読むのは時間がもったいない。
最新の2.2系を使ってアプリ組むほうがいい。
おまいら、設定より規約ですよ。
>>394 ありがとうございます。
今日電車の中で何章か読みました。Simply RailsではAutomagicalな
こと(って表現は使ってませんが)ばかりだったけど、舞台裏が分かると
とても理解しやすい。
で、自分自身はアプリを作るわけじゃなくて、十年以上熟成したPerl+PHP
スパゲッティ(初期の責任は私にあります)を、来年度どうするか検討する
ための指示をする立場なので、まずはもうちょっと掘り下げたいと思います。
まぁphpやperlでスパゲッティ作る奴は、 なんだかんだでruby使ってもおいしい スパゲッティを作ることが出来る。
それぞれがスパゲッティというわけじゃなくてね、 のべ数百人が1000を超えるモジュールを作っていて、 ドキュメンテーションもろくにしてない上に、 当時の担当者はほとんど異動や退職でいなくなってるわけですよ。 そろそろ全体をリファクタリングしないといけないよね、と 思ってるんだけど、ならば共通のプラットフォーム整備して やらないといけないよなー、なんてたまには悠長な仕事の 仕方をしようかと企んでるわけです。
のべ数百人が関わってきてその状態じゃ 今までも同じように誰かがリファクトしようとするんだけど 結局他の仕事やらで一部を改修したに過ぎず その実スパゲティに一味加えただけであり それが繰り返されるスパイラルに陥ってる可能性高いなあ 本当に時間と(力のある)人を投入できて 且つその案件がそれ相応の対価に本当になるモノなのか、 自ら貧乏クジ引こうとしてないかよく考えた方がいいかもね、 とか余計なお世話してみる この世界で悠長なんて幻想だぜ なぜならそこに、あんたの目の前に美味しそうなスパゲティがあるからだ みんな俺こそ全部食ってやると思うんだ そして今、おまえの番だ
スパゲッティ回避のために、上から言えるのはこんなとこか。 RDドキュメント 自動テストのカバレージ100%必須 ペアプロ コードレビュー うーん、どれもやったことのない人にはブーイング必至。 人望がためされますな。
ペアプロやるならコードレビューいらんし。 というか無駄。
そんなに大量のプログラムがあるなら、
個々のプログラムよりも全体を見ることが重要だと思うが
ひとつひとつは問題なくても実はたくさん重複してたり、
ルールを決めればうまくいく部分がたくさんあるなんてよくある
>>400 は単体レベルしかサポートしてないな
>>401 のべ数百人で、同時に何十人かが同じプロジェクトで仕事してるとすると、
ペアプロよりもうちょっと大きい集団で意志統一が必要じゃないか?
馬鹿二人でやってもしょうがないしな
405 :
松江の鉄オタ厨房キハ187 :2009/02/22(日) 00:01:46 ID:U5nWJJ8H
406 :
nobodyさん :2009/02/22(日) 00:40:55 ID:LXvjeYZA
すいません、最近ruby on rails 始めたんですが、サーバとしてApache の他にPound とかMongrel を使う理由がいまいちよく分かりません。 どういう利点があってpache以外のサーバを使うんでしょうか?
>>406 お前は何を言っているんだ。
Apache … Webサーバ
Pound … リバースプロキシ&ロードバランサ
Mongrel … Rails用(だけじゃないけど)アプリケーションサーバ
それぞれ役割というか種類が別のものなんだが。
ただしApacheはmod_proxy_balancerを組み込むことでリバースプロキシ&ロードバランサ
にもなるし、Passenger(mod_rails)を組み込むことでRails用アプリケーションサーバにもなる。
それにPoundとかMongrelとか、誰に聞いたんだよそれ。情報が古すぎる。
リバースプロキシはApache2+mod_proxy_balancerかNginx、アプリケーションサーバは
ThinかEbb、それもめんどくさいからたいていはApache2+Passengerってのが主流。
スケールさせる用途もあるね。 Apache2+Passengerも一台で足りないなら、 ハードウェアのロードバランサか、 PoundやApache+mod_proxy_blancerやLVS といったソフトウェアロードバランサを使う。
最近開発期間がかなり短い案件が増えたせいでrails大活躍だわ 先に画面サクサク作って客に動かしてもらうと、リリースギリギリの仕様変更が比較的少ない 触ることでイメージしやすいから、要件が短期間で固まるって感じ 画面作ってひたすらカバレッジの流れもrailsはすんなりできるからいいね
railsアプリは保守が面倒くさい印象があるんだが。
冗談でいってるんでしょ。
>>410 開発のサイクルがめまぐるしく早いのと、DHHが後方互換性を全く気にしない
せいで、1年前に作ったアプリが最新版のRailsじゃ動かないとかザラだしね。
RackのRuby1.9対応が終わり次第2.3の正式版がリリースされるそうだけど、
5月にはmerbと融合した3.0が出るらしいし、ここでもこれまで以上に後方
互換性がないがしろにされそう。
ただしmerbの中の人たちはその辺りのことをDHHよりは気にしてるという話
なので、3.0以降は少しはマシになると思いたいが。
413 :
407 :2009/02/22(日) 14:57:27 ID:LXvjeYZA
なるほど。ありがとうございます。 すいません、もう一つ・・ Webrick っていうのは簡易なウェブサービス用で、外部に公開する目的で作るのならば、使う必要がない感じでしょうか? 普通にApacheで開発でいいのかな。。
>>412 別に最新のrailsを使う必要ないし、そのためにバージョン指定して動作できるようになってる。
>>413 WEBrickはアプリの動作確認用にオマケでついてくるサーバであって、これを
公開する物好きはあまりいないと思う。
最初の質問を補正しながら答えると、MongrelやThin単体であってもインター
ネットに公開されているサーバで80番ポートで起動すればサービスの運用は
可能だし、その点はWEBrickも同様。
しかし実際にそれをやるのは間違いなく素人で、普通はその上にリバース
プロキシをかぶせる。
これが
>>407 で言ったApache2+mod_proxy_balancer等のこと。
なぜこうするかという理由は2つある。
1つは公開サービスには複雑な運用が求められること。
同じサーバで別ドメインのサービスを運用したり、特定のアドレスからのアクセス
を制限したり、任意のURLへのアクセスをリダイレクトさせたりといった必要が
出てくる。
ApacheやNginxは、デフォルトもしくはモジュールを組み込むことでこのような
機能に対応している。
>>415 の続き
もう1つの理由は負荷分散にある。1台の物理的サーバに1つのMongrelしか
立てないのは、ハードウェアリソースの多大なる無駄遣い。
1プロセスのMongrelが秒間にさばけるリクエストは限りがあるが、Mongrelの
プロセスを増やすことでその上限を増やすことができる。
ただしMongrelは1プロセスにつき1つのポートを使用するわけで、全部の
Mongrelを80番ポートであげるわけにはいかない。
よって複数のMongrelを別々のポートで立ち上げ、80番にはApacheを立ててそこ
に来るアクセスをバランスよく複数のMongrelが使用するポートに振り分けて
やるといったことを行うわけだが、それを可能にするのがmod_proxy_balancer
というモジュールだ。
>>416 の続き
今言ったような情報はネットで検索すれば出てくる程度の話だが、これら
の情報を自力で集められない人にとってはRailsで開発することは勧められ
ない。
なぜならRails界隈の動向というのは
>>412 のような状況なので、技術トレンド
についていけない人が作ったシステムは、あっというまにout of dateになって
誰もメンテできなくなってしまう可能性が高いから。
Railsの開発コストが低いというのは、それ相応のスキルと周辺知識を持った
人が開発した場合の話であって、プログラミングの素人が初めてアプリを作る
環境としてはどうかと思うし、後々のメンテナンスコストを考えると自分なら
止めるだろう。
なら現時点では何がいいのかと聞かれると答えに困るが。
まとめてサイトにして立ち上げてくれると神だぞ
>>414 そんなことは先刻承知の上での意見なんですが。
開発チームがすでにメンテを放棄したバージョンのフレームワークで、自社
の大事なサービスを動かしておきたいと考える経営者がいると思う?
そのアプリを開発したエンジニアがずっと会社にいてくれるわけでもなく、
またトラブルが起きた場合にWebやコミュニティで情報収集しようと思って
も、誰も使ってないバージョンだと誰も答えてくれない、情報もないという
事態が起きることは十分あり得るし。
>>413 今までPHP等でやってた人?Railsはアプリを動かすのにサーバー側の知識がいるからちょっと大変かも
お勧めは本番環境がapache&passenger、開発環境はwebrick
多分これが今は一番お手軽。とにかく最初これでアプリを動かしてみる。慣れてきて不満点が見えてきたら他の環境にも目を向けよう
421 :
nobodyさん :2009/02/22(日) 17:10:56 ID:DRBsxH8G
技術の陳腐化はRailsに限った話ではないけどね JavaやPHPで作られたシステムが、Railsで作られたシステムよりも明らかに陳腐化しにくいとは思えないが その辺りの話が書かれているので、読んでいないなら一読をおすすめします 「JavaからRubyへ――マネージャのための実践移行ガイド」
>>421 あくまで程度の話で、All or Nothingで言っているわけじゃない。
だからこそ、3.0以降なら手を出してもいいんじゃないかと言ってるわけだし。
JavaよりもRubyのほうが使い勝手がいいというのは同感だが、自分が言って
いるのはあくまでRailsの話。
DHHはMatzを見習って、もうちょっと温和になってほしい。
423 :
413 :2009/02/22(日) 17:37:09 ID:LXvjeYZA
レスありがとうございます。
>>420 そうです。あとperlとか。
自宅サーバ立てて遊んだりしているのでapacheいじったことはあるのですが、他のサーバいじったことはなかったのもので・・
>>415 とても詳しくありがとうございます。勉強になります。
railsは難しくても使い続けようと思っているのでがんばって勉強してみます。
ありがとうございましたm(_ _)m
よし!おれこれからRails1.2.6でアプリつくる!
ソフトウェア開発には、しばしば交わっているがたいていは分かれている、 5つの世界がある。 その5つとは: 1.パッケージ 2.インターナル 3.組み込み 4.ゲーム 5.使い捨て スクリプト言語の得意分野は、5.
ジョエルだっけ。
今時のWebサービスの寿命って、成功してなきゃ結構短いからなぁ Railsなら作り直し楽だけど そういう意味では使い捨てか
関係ないが「Webサービス」って言葉を「Webで提供しているユーザー向け サービス」という意味で使うエンジニアとは仕事したくないなあ。 「Wikipedia」を「Wiki」、「シェルスクリプト」を「シェル」と略す輩も同様。
シェルはいいだろ
よくないよ。 シェルとシェルスクリプトは全くの別物で、意図して使い分けられてないと 聞くほうが混乱する。 両者を混同するプログラマは、自分にシェルそのものを作れる技術がない から「シェルを書く」と言ってもシェルスクリプトに決まってると勝手に思って るんだろうが、Cでシェルが書けるプログラマにとってはまぎらわしいんだよ。
文脈で判断しろ。普通にわかるだろ
だから、そういう言葉の定義を全く気にしないプログラマが書いたコード なんか読めたもんじゃないし、後々何が起きるかわからないという話だよ。 スレ汚しスマソ
じゃあ仕事しないんだ
Webサービスって言葉が変、ってW3Cに言っといてくれ。 Webサーバという言葉が一般的なんだから、Webサーバが提供するサービスは、 それがSOAPだろうがRESTだろうが人間が直接読むHTMLだろうが、Webサービスだ。 それ以外の変な限定的な定義づけは混乱を招くだけ。 Webサーバという言葉がそもそもおかしいというなら、まずその単語を撲滅して HTTPサーバという呼び方に、世の中を全面的に変えてくれ。
わかんないやっちゃな。 誰も一般的な解釈がどうとかの話をしてるんじゃないんだ。 「Webサービス」という言葉がSOAPやRESTスタイルのWebAPIを提供する ものを指すという事実をそもそも知らないエンジニアは論外だし、その 技術的定義を知っていてなおかつ「Webで提供されるユーザー向けサービス」 の意味で使っても気にならないような、言葉の定義に無頓着なエンジニア は、経験上ろくなコードを書かないと言ってるだけだ。
>>417 >>414 とかどう思う?
理性としては分かるけど、本能的に不安なんだよ
417=419じゃないよね?
437 :
nobodyさん :2009/02/23(月) 06:11:58 ID:LrwJMtrj
あぁん? そこまでいうなら、お前の定義するWebサービスが正統だと証明できる根拠を見せてほしいが 俺の経験上、多くの人間がそれぞれ微妙に違う意味合いで理解している言葉を 俺が理解こそ正しいと自分の定義づけを押し付けてくる輩にロクなエンジニアはいないんだが
シェルとシェルスクリプトは違うって突っ込まれるのはたまに見るけど、 それについて噛みついてるのを見るのは初めてかも。 「ふ〜ん、そうなんだぁ」 って思っておけばいいじゃん、そんな興奮しなくてもさ。 言葉を正しく知らない方が、ロクなエンジニアじゃないと思うよ、やっぱり。 ともあれ、両者落ち着いてまったりいきましょう。
言葉なんて通じりゃいいんだよ。 そんなしょうもないことにこだわるやつは 技術者としては優秀なやつがいたとしても 協調性がなかったりして性格がいがんでる。 仕事が出来ないやつが多い。
>>437 ブーメランもいいとこ
自分の考えを押し付けてるのはあなた
じゃあユーザ向けのWebサービスはなんて呼んでAPIのWebサービスはなんて呼ぶんだぜ
>>434 ・言っといて
・変えてくれ
・根拠のない一般論
主体性のカケラもねえのなwwwww
× 俺が理解こそ正しい ○ 俺の理解こそが正しい ×いがんでる ○ゆがんでる(歪んでる) こんな短いやりとりの中で、すでにSyntax Errorが2つもある。 「言葉なんて通じりゃいい」と主張する輩のコードが汚いという ことを自ら証明しているようなもんだ。
スパゲティ大好きな一匹狼によく見るタイプだよな。 視認性とかメンテ性とか無視、より効率的に美しく。ただし自分的に。 ライブラリ大嫌いでコピペと車輪の再発明が大好き。 自分のコードすげえとか悦に浸るオナニーコーディング。 で、掲示板でこんだけ威勢張ってて、協調性について語ってるのは笑いどころ?
>>443 そんなの分からないだろ。
母国語の言語力を犠牲にして得た力があるかもしれない。
「いがんでる」って方言だべ
したっけ、まんず日本の総理大臣のいいまつがえをなんとかすっぺぇよ。
>>443 いがんでるを方言だと認識できずに、SySyntax Error扱いしている
お前の欠陥エンジンもどうにかしたほうがいい
不毛な話題ほど盛り上がる
参加しやすいからね
ばいくしぇっど?
railsじゃない話題で大盛り上がりだ!
既にRailsで語ることがないぐらい廃れてるということ。
もういいからクニに帰れよ田舎者
PHPやpythonのRails風フレームワークと比べて優れてるところは?
>>455 Rubyで書かれてることかな。
RSpecやCucumberのようなDSL形式の優れたプラグインが多い。
じゃあ劣ってるところは?
DHHが俺様なこと。
>>456 それ単にお前が他のFWのプラグイン知らないだけじゃんwwww
pythonに比べると、rubyで書かれてるって欠点でしかない
つーより言語論争のきっかけになるようなレスしてる
>>456 が荒らし
DSLが何かご存じないようで。 デジタル加入者線のことじゃないぞ。
>>459 rails風fwじゃなくてPython on Railsが出ればよいのになあ
Pythonスレで言えよ。 ここでPythonをDisられたいの? マゾなの?
>>463 階層が深くないDjangoが良いらしいよ。
Pythonユーザは。
Railsからフレームワークってやつを使い始めたから、Djnagoはちょっと使いづらかった。 テンプレートはシンプルで好きなんだけどね。
規約があるから他の人のソースも読みやすいはず! と思っていた時期もありました。
みんな今後のRailsに何を求めてる? 正直、当分は機能増えなくていいから速度と(特に)メモリ消費量を改善して欲しいと思う事はある 格安レンタルサーバーでも放り込んでおけば動かせるFWが羨ましいのは事実 Ruby1.9 + Rails3では劇的に変わるのかなぁ?楽しみ
おれも機能より性能と安定性。3で落ち着いてほしい。 なんでもかんでもフレームワークでやろうとしなくてもいいと思う。
ボトルネックになる所ぐらいC言語で書いてくれてもいいんじゃないか,と思ったり
Passenger で負荷分散したいときってみなさんどうやってますか? 前に1台Apache立てて、mod_proxy_balancerで振り分けるって感じなんでしょうか?
473 :
nobodyさん :2009/02/26(木) 09:04:18 ID:WBghJzwC
passengerはbalancerいらないよね? 負荷を下げたいなら、Apache+passengerのWebサーバを2台用意するかな。
ひとつのドメインで受けたいという話じゃないの?
だったらDNSラウンドロビンにすればいいと思うんだけど。
DNSラウンドロビンをなめてはいけない。
ttp://japan.cnet.com/blog/neta/2006/08/10/dns_ecfc/ クックパッドもDNSラウンドロビンっぽいし。
$ nslookup cookpad.com
Server: 192.168.11.1
Address: 192.168.11.1#53
Non-authoritative answer:
Name: cookpad.com
Address: 203.183.167.214
Name: cookpad.com
Address: 203.183.167.215
Name: cookpad.com
Address: 203.183.167.216
Name: cookpad.com
Address: 203.183.222.67
Name: cookpad.com
Address: 203.183.222.68
Name: cookpad.com
Address: 203.183.167.201
Name: cookpad.com
Address: 203.183.167.202
Name: cookpad.com
Address: 203.183.167.211
>>473 その2台に振り分けるためのロードバランサがいるんでしょ
もしかしてPassengerだけで別ホストに振り分けることできるの?
そこまで機能詰め込んでもらわなくてもよさそうだけどな
>>474 フェイルオーバーとか色々めんどそうなイメージあったけど
RailsはCookieでセッション扱うようになったし簡単な選択肢になってきたのかなあ
476 :
nobodyさん :2009/02/26(木) 16:03:18 ID:WBghJzwC
>>475 2台サーバ用意するんだから、ロードバランサは必要。
だけど、それは書かなくても分かると思ったので省略した。
で、自分が言った2台を用意するというのはグローバルIPを2つ用意して
>>474 のいうようにDNSラウンドロビンすればいいという事。
1つのホスト名に対して、2個のIPを設定すればいいわけだから設定も簡単。
mognrel + proxy_balancerを使ってたのは、1つのRailsインスタンスが
同時に1リクエストしか処理できなかったからだけど、
passengerはそれを解決してるよね。
passenger1つで、複数のリクエストをさばけるわけだからproxy_balancerは不要。
477 :
nobodyさん :2009/02/26(木) 23:13:42 ID:3x+Ff7qA
参考になります その辺の運用周りについて詳しく解説されている書籍・Webサイトはご存知でしょうか?
運用ノウハウ欲しいなら勉強会行けばいいよ
どこのがいいの?
480 :
nobodyさん :2009/02/27(金) 09:06:36 ID:pVHBsIy5
Rails勉強会とか? 後は実際に公開サーバでRailsアプリを運用するのが一番勉強になる
そういう迷惑なことは辞めろ
482 :
nobodyさん :2009/02/27(金) 14:04:23 ID:pVHBsIy5
>>480 に補足
もちろん、公開サーバの話はきちんと知識を身に付けた後の話。
わざわざ書かなくても分かると思うけど、念のため。
実践する事も大切。
実際に運用してみないと分からない事もあるよ。
最新情報はネットで
断片をつなぎ合わせるのはつらいから、 やっぱり書籍でがっつり紹介してもらった方がいいの〜
Rails2.2のActionMailerでiso-2022-jpのメールを送る方法が分かりません。 ActionMailer::Baseでデフォルト文字コードを指定すると、 Content-Typeのcharsetはiso-2022-jpになってくれますが、 本文の文字コードは変換してくれないようです。 そこでView(メール本文)をiso-2022-jpにすると、 今度はViewの解析でエラーになってしまいます。 ソースを読んで地道に直すしかないでしょうか?
487 :
486 :2009/03/01(日) 14:00:19 ID:???
ソースを読んでみましたが、 ActionMailer::Base#create!を上書きする昔ながらの方法が まだ使えそうな感じだったので、とりあえずこれで行くことにします。
gettextをインストールするという手もあるな。
Twitterで仕入れてきたビッグニュース 次期RailsがMerbが統合されてRails3としてリリースされるらしい DHH(Rails作った人)がTwitterで言ってたから間違いないはず 英語圏の情報をダイレクトで仕入れといてよかったよ
マヌケだなおいw
gettextはRails2.2と互換性ないよね。たしか 入れたらエラーになった記憶がある。
いまRails 2.2のi18nと折り合いを付けるために作業してるみたいですな。 あと、githubに引っ越すのにちとゴタゴタしていた模様。
メールは、actionmailer_jaっていうプラグインがあるみたいだね jpmobileっぽくて良さげ
form_forに渡すオブジェクトってActiveRecordじゃないとダメなの?
>>496 ActiveForm使えばいけるかも
やったことないけど
>>496 試してみた。DuckTypingでいけた。
>>499 うちはNB6.1だからちょっと違うかもしれないが、
メニュー→ツール→RubyプラットフォームからMacPortsで入れたRuby(/opt以下のもの)
を登録。新規RoRプロジェクトの作成時に、Rubyプラットフォームを選ぶ。
MacOS X 10.5には、Rubyや1.2時代のRails環境が付いているんだぜ。
3枚めを見て気になったんだが、PATHに/opt/local/binは入っている? Portsで入れたRubyは1.8? 1.9?
できますた /opt/local/binのRubyにしたら、新規プロジェクトでRailsが1.2ではなく2.2を選ぶようになってくれた ターミナルでgem list --localするとキチンとrailsが2.2になってて、 whereis gemしたら、/usr/local/binってなるから、それを見に行くと オリジナルは/System/Library/Frameworkd/ruby.framework/Versions/1.8/usr/binってわかる NetBeansのGemパスはこれと一緒だし、これのGemホームは/Library/Ruby/Gems/1.8になってる けどopt/loca/lib/ruby/gems/1.8が正解 なんでやねn
503 :
499 :2009/03/07(土) 22:22:11 ID:???
504 :
499 :2009/03/07(土) 22:25:14 ID:???
sqlite3-rubyは明示的にコマンドラインからインストールしないと駄目じゃない? sqlite3はMacPortsで入れ、Rubyバインディングはgemで入れる。 $ sudo port install sqlite3 $ sudo /opt/local/bin/gem install sqlite3-ruby (間違って/usr/bin/gemを使わないよう、念のため絶対パスで示した) or 両方MacPortsから入れる。 $ sudo port install rb-sqlite3
506 :
499 :2009/03/07(土) 22:58:57 ID:???
できましt! ありがとうございます
507 :
nobodyさん :2009/03/08(日) 02:42:32 ID:VdgrfizB
質問させてください。 ruby 1.9.1 rails 2.3.0 CentOS 5.2 apache & passenger sqlite3のDB作成済み の環境で動かしていて、ブラウザ経由でデフォルトのindex.htmlを表示させるところまでは行ったのですが、 ruby script/generate scaffold Sample text :string place :string created_at :datetime とやると、 /opt/lib/ruby/gems/1.9.1/gems/actionpack-2.3.0/lib/action_controller/routing/segments.rb:6: warning: encoding option is ignored - N と wrong number of arguments (1 for 2) というエラーが出力されました。 xxx.jp/samples/list のようなURLにアクセスしてみたのですが、404 が表示されてしまっています。 原因として考えられること&解決方法分かる方いらっしゃったらご教示頂けると幸いですm(_ _)m passengerのURLルーティングがうまくいってないんだろーか・・
自分で原因を調べて修正できないならruby1.9.1とrails2.3.0は使うべきではない。
無料でRoR環境揃えられるのに、わざわざマクなんて買ってご苦労な事だ。
>>510 508はごくごく正論だと思うが。
ここはそもそも教えてスレじゃないんだから、答えるのは飽くまでその人の善意。
自分のほしい答えがもらえなかったからって逆ギレしなさんな。
おれは1.9のスピードに魅力を感じるがな。 測定したわけじゃないから体感レベルだが確かに速い。 1日10万とか20万PVくらいまでなら1.8でもいいが、 100万を超えるなら1.9だろう。 あと個人的なべき論を、 まるで正統かのようにレスするのはおれもどうかと思う。
>>512 Rubyist Magazine - Ruby 1.9 で Web アプリを想定したベンチマークをとってみた
http://jp.rubyist.net/magazine/?0025-Ruby19_Performance > ベンチマークの最後として、データベース処理を含めたベンチマークを実行してみます。
> 内容はコメントつきの Blog アプリケーションであり、使用したデータベースとデータ件数は
> 以下の通りです。
>
> * MySQL バージョン: 5.0.67
> * データ件数: ユーザ 10 人 + ブログエントリ 5000 件 + コメント 10000 件
(中略)
> この結果から、次のようなことがわかります。
>
> * Ruby による消費時間を比べると、Ruby 1.8.7 より 1.9.1 のほうが約 1 % ほど速い。
> * 全体の実行時間のうち、Ruby による消費時間はわずか数パーセントにすぎない。
結論:
1.9系で速くなったのは科学計算等で使うようなアルゴリズムの部分であって、基本的に
文字列操作がメインのWebアプリケーションでは目立った高速化はない。
またWebアプリケーションのボトルネックはDBであることがほとんどであり、Ruby処理系
が数倍高速になったとしても、全体のパフォーマンスに与える影響は限定的なものである
場合が多い。
RoRの話じゃないのに、ミスリード誘ってるの?
1.9は速度っていうよりもマルチスレッド化が webアプリにとって大きいんじゃないの?
>>516 長期的にはそうだね。
ただ今の時点でRailsのスレッドセーフオプションを有効にして、さらにRuby1.9で
動かすのは人柱以外の何者でもない。
何か問題があっても自己解決できないような素人にはオススメできないのは当然。
>>513 こんな例で比べられてもw
MySQLのくそ頭の悪いオプティマイザー+エンジンで結合使うとかそれこそ自殺行為だからw
純粋な計算処理とViewのところは参考になったけど
あと1.8と1.9の両方で動くプログラムで比べても意味ないから
まんま入れ替えて動作して高速化してとか期待してないし、
そもそも動かないだろうし
1.9の評価がさんざんなので、信者が必死になってる感じだな。 DBはどれがいいの? やっぱりオラクル?
いやそもそも1.9じゃWebアプリは速くなるどころかヘタすると遅くなるんじゃね?って 言われてただろ。 MatzだったかささださんだったかYuguiさんだったか誰か忘れたけど、そういう趣旨 の話をどっかで聞いた記憶がある。
そもそも現時点でRailsってそれほど遅くない。 EngineYardの計測データだと、素のPHPには負けてもCakePHPみたいな フレームワークと比べると数倍は速いらしい。(さらにそれよりもMerbの ほうが速いというオチはついてるが) Railsの何が問題かというと、メモリの爆食い。 これはMerbにも共通することなので、3.0で統合されても当面解決しそうにない。 メモリ使用量の少ないフレームワークにはWavesとかSinatraとかあるら しいが、いまいちマイナーで実績がなさそうなのが難点。
なんでそんなにメモリ食うの? いらんライブラリー読みまくってるとか、アクティブレコードで消費してるとかか?
「悪い」わけではない メモリを節約して使うという設計になってないだけだ メモリを節約するとCPU時間を食うから、メモリを使うように設計しただけ メモリのほうが大事な人はRuby使ったら駄目
時間と空間のトレードオフ、て奴だね 速度を重視するなら、メモリにコンテンツ展開して外部記憶(HDD)へのアクセスを減らす 空間(メモリ節約)重視なら、必要になる度にHDDから読み込んで使い終わったらすぐ開放
pythonはメモリ食わないよ(rubyと比べて) はやいし
Rubyはコンセプト的に遅いんだよ PythonをRubyと同じ動作するように作ったら、Rubyと同じ速さになる たとえば、Rubyからeval機能を無くせば一定の速度向上が望めるが、それはきっとRubyではない
あれ、違うわ。3倍近く遅いんだ。 使えないな。
IronRubyは速くなるか遅くなるかの二者択一だと思う CRubyより速くならない処理があるのなら、そこはCRubyよりずっと遅く動く 速くなる部分だけIronRubyが使えればいいが、そううまくいくかね
え,速くなることもありそう? DLRとかがもうそんなに発達してるってこと? CRubyにはJRubyにもIronRubyにも負けてほしくないなあ
IronRubyが出てばMSがドキュメントを整備してくれるかもしれない おれはそれを期待している Railsが動くようになるなら、相当互換性は高いだろうから
>>509 LinuxはPCも無料なんですか
すごいですね
Ruby on Rails の開発陣は全員Macだったような、、、
ゲイツの子供はRails禁止です
ピニャータだろw
上げ足とられて悔しいのかも知れんが、
>>533 はまともだと思うが。
自己紹介乙
iPhoneとiPodは実際に禁止らしいな。立場上。
RoRの話をしなさいw
マクよりPCのほうが安い現実。
Macで開発できるけど、運用どうすんの。 Macサーバー買うの?
うちはWindows/Gentoo/Macで開発してCentOSでサービス公開している。 なんで実運用までMacでやらにゃあかん?
下らん煽りに釣られるなよ・・・
最初から無料の遷都で開発すればもっと儲かる。 マクの10マソ鯖なんて無いだろ。
そんな利益カツカツのサービスでやってるのか。
MacってMacPro以外は使えねえからなあ。
アンチMacはなんなの? Macで開発したらバカなの? 儲からないの?しぬの?
ところでみんな、ViewのPartialってちゃんと動いてる? <% render :partial => "hoge" %> で、_hoge.html.erb を読み込ませても、中のHTMLが表示されない。 2.1、2.2、2.3の三つのバージョンで試しても全く同じ。 ファイル名を変更するとエラーになるし、_hoge.html.erb の中で <% p "AAAAAAA" %> とかやると WEBrickのログのほうに"AAAAAAA"が出力されるので、読み込まれているのは確かなんだけど。 使い方が間違ってるんだろうか。
<%= render :partial => "hoge" %> ~~~~ =を付けてないんじゃまいか?
554 :
552 :2009/03/11(水) 00:44:00 ID:???
>>553 あーなるほど。=をつけなきゃいけないということをすっかり忘れてました。
いやお恥ずかしいかぎり。
自分では気づけなくて今日半日くらいつぶしたので、感謝です。
2.3のRCの出来は如何に
マクなんてどれ使っても使えないだろwww
昔触ったとき、右クリックがないことにものすごい憤りを覚えた
>>558 Macはマウスだけじゃなくてキーボードと併用するのが普通
初代さんが見たらこの現状きっと泣くだろうなと思って研究室で使ってた
>>559 そんなことは知っているが、使いやすいと評判な意味はまったくわからなかったな。
しかも普通に2ボタンマウス使えば右クリック使えるというのがまたふざけてる。
いちいちボタンひとつにしてる理由が全く無い。
561 :
sage :2009/03/11(水) 09:56:51 ID:La0qmAhb
入力→確認→登録という流れのフォームを作ってます。 フォームの項目が頻繁に変更・追加・削除され、 そのたびに入力用テンプレートと確認用テンプレートを編集してます。 入力と確認用のテンプレートはほぼ同じ内容なので ちっとも DRY じゃないなーと。 みなさんはどうしてますか? 入力&確認テンプレートを吐き出すプログラムを別途用意? それとも何か便利なプラグインが???
純正マウスも3ボタンじゃないしな。PCのほうが普通に使い易い。 オブジェクト指向なんだから使い回せるように工夫すれば?
Macは信者が痛すぎるんだよ。 いちいち、「俺、Mac使ってる」とかいう奴なんなの?特別な存在だと思われたいの? と、言ってみる。
>>560 設定変えれば純正マウスも2ボタンにできるぞ。
デフォルトが1ボタンなのは文化か?
Macはアンチが痛すぎるんだよ。 いちいち、「俺、Mac嫌ってる」とかいう奴なんなの?特別な存在だと思われたいの?
マク話はもういいよ・・・。
567 :
561 :2009/03/11(水) 19:14:46 ID:???
Rails の話もお願いします><
新Macbookは4本指に対応したからマウスいらなくなった
>>561 頻繁に変更されない様に初めにきっちり仕様を決める
>>561 どうせ最初から理想の設計にはならないので、フォーム項目が安定しないうちは
べた書きでいいんじゃない?
安定したらまた考える。
>>561 それこそ部分テンプレ使えばいいんじゃないかと思うんだが、そういう基本的な話じゃないの?
確認のその場で修正できるフォームなら、部分テンプレートでよさそうだな。 「確認用はフォームではなく編集不可のHTMLとして表示する。 間違いを見つけたら編集ボタンを押して、現在値入力済みの 入力フォームへ飛ぶ」だと個別作成になるかね。
テンプレート一枚で actionでinputとインスタンス変数表示切り換えるヘルパー作っちゃえば? input confirmつながりで、 confirm時は皆hiddenに突っ込んでる? それともセッション? 個人的には セッションにあまり値入れたくない派だけど 皆どうなのか気になって聞いてみた
hiddenにしておかないと進む戻るされたときにすじつまがあわなくならん?
575 :
507 :2009/03/12(木) 00:15:41 ID:JHPTnQN+
レスありがとうございましたm(_ _)m
結局rubyのバージョンを1.8.7に落としてやることにしました。
>>510 は俺じゃないっす。
すいません、また聞きたいことができたのですが、
ActiveRecordの定義ってどこにありましでしょうか?メソッドの一覧を見てみたいと思いまして。。
ご教示頂きたくm(_ _)m
577 :
507 :2009/03/12(木) 00:28:17 ID:JHPTnQN+
ありがとうございます。 すいませんActiveRecord そのものの定義はどのファイルに書いてあるんでしょうか? grepしても分からないんです><
確認画面はセッション派。「戻る」対策で。 IEだと戻った時に、画面再読み込みみたいになっちゃうし、 入力画面にAjaxで選択するような項目があると、その際に消えてしまう。 なのでセッションに入れてる。
ActiveRecordそのものって何だ? モジュールだぞ。
580 :
507 :2009/03/12(木) 00:52:05 ID:JHPTnQN+
? ActiveRecordっていうクラスがあるんじゃないんですか? モジュールっていうことはActiveRecordっていうファイル名?
>>580 たぶん君が見たいファイルはこのへんにある
/opt/lib/ruby/gems/1.8/gems/activerecord-2.3.0/lib/active_record/base.rb
でも定義見てもたぶんわかりにくいよ
method_missingとかも使ってるしね
とりあえず
>>576 で十分なので満足してくれ
ソース見るのはまだ早いと思われる
>>580 継承するとき ActiveRecordじゃなくてActiveRecord::Base を継承するだろ?
みんなPC使ってるのに、マクでは出来ない動かない見れないとか言い出すからウザがられる。 素直にみんなと同じPC使えよ。マカって典型的なKYだしな。協調性無い。
マカが嵐だけどな。PC限定にしようぜ。
>>580 ActiveRecordを読み下すには、まずActiveSupportでいろいろ拡張されてる
ModuleやClassのクラスメソッドを一通り読んでおくことをおすすめする。
Method chainとか、知らなきゃハマるよ。tags探しても_without_hogeなんてどこにもないし。
あと静的なコードだけ読むんじゃなくて、ruby-debugを活用して
実行時に実際にどこのコードを使っているのか追っかけるのもいいと思う。
単純にメソッドリストが見たいだけなら、rdocを作ってgem serverか、api.rubyonrails.orgへGO
589 :
561 :2009/03/12(木) 13:12:19 ID:???
561
>>569-574 ありがとうございます。
フォームの項目なんて変化するものだし、
何十もフォームを作る場合はベタなんてありえないし、
部分テンプレは textarea で隠れる行とかあるしで、
573 氏のヘルパー路線で考えたいと思います。
ヘルパーにしても車輪の再発明の気がするので
既存にないものかと調べてもないし…。
SKIP, redmine, typo, fastladder みても確認画面ないし。
確認画面は鬼門なんですかねぇ。
590 :
nobodyさん :2009/03/12(木) 14:35:32 ID:OX3C3H1c
最近ネットワーク系の勉強を初めて、サンプルを元にRubyで require 'net/http' Net::HTTP.version_1_2 Net::HTTP.start('be.2ch.net', 80) {|http| response = http.post('/test/p.php',"i=6811") puts response.body } と書いて、BEプロフを見たいと思ったのですが、うまくいきません。 解説お願いします。
591 :
590 :2009/03/12(木) 14:49:30 ID:OX3C3H1c
すみません、焦ってスレチでした。 取り下げます
grails使ってみたけど、バグだらけでどうしようもないな…
593 :
507 :2009/03/16(月) 20:29:13 ID:a70xmYHv
レスありがとうございました!参考にさせていただきます。
いま仕事でJRuby使ってるんだけど、これなかなかすごいのな。 JavaのライブラリがRubyのクラスとして普通に使えてしまう。もうJavaいらないじゃんw JRuby on RailsならアプリをWARで固めて一発デプロイできるし、ネイティブスレッド なので、素のRailsより負荷に耐えられる。 GlassFishならホットデプロイも一瞬だし、コネクションプーリングも標準装備。 なんでわざわざJavaのVM上でRubyを動かさなきゃならんのだと思ってたが、触って みて評価が一変した。
使ったことないのだが、Rubyを使う必然性はあるのか?
JRubyもJavaなんだから、Javaいらないというのはおかしい
速いと言われているJRubyだが、 Railsの性能で比較するとCRubyより遅いんだけどな。
jrubyは俺も驚いた。でもjruby railsはconsoleやrunnerの立ち上がりが遅かった。あと標準ライブラリも微妙に違う。YAMLとか。現時点ではJAVAにしか無いライブラリを使いたい時のグルーコード用ぐらいに思ってます。今後に期待。
>>595 Rubyで面倒なこと・Javaのほうが簡単or柔軟にできることの切り替えが容易
CRubyならたとえばCで拡張ライブラリ書いたり既存のを探したりしなければならないことが、Javaとの連携で即座に可能
速攻で書いて速攻で動かしてから実際の負荷とか考える、というRuby/Railsにぴったりだと言えばそうかもしれん
強力な実働用途に使ってる人はまだおらんだろう
検索条件など、Modelの属性ではない入力値のバリデーションってどう書くべきですか? みなさんControllerにベタ書きしてるのかな?
新規に作る際、
$ rails xxx
したあと、毎回
config/database.yml の host を変更するのが面倒なのですが、
どこかに書いておくことで反映される方法はないでしょうか?
( Controller はあくまでも Controller だけにして、Model に関係なくても Model に書いているかなぁ
>>600 )
sed -i 's/host: .*/host: hogefuga/' config/database.yml でよくないっすか。 production のホストはコレで、development のホストはアレってことだと いよいよawkの出番ですね! :)
603 :
601 :2009/03/17(火) 17:45:15 ID:???
>>602 やっぱそういうことになっちゃいますか。
Rails2.3 の Application Template に少し期待したのだけど、
どうも、そこまではしてくれないみたいなので。
development & test も変えたいので perl で書くことにします><
Javaの運用管理機能に比べれば、rubyは無いに等しいしなあ。
rails を仕事で使っている人いますか? 数カ月おきのバージョンアップに追随してますか?
サービス公開したらよほどの事がない限りバージョン固定。
仕事で使ってるシステムをほいほいバージョンアップするなんて聞いたことないぞ
まあ、そうだよな。
セキュリティ修正のマイナーバージョンアップだったら、テストの上で導入するかも。 rexmlのときは修正gem出たからそれ使ったけど。
なんかCapistranoの開発してた人が、いやんなってやめたらしいね。
よく読んでないけど、ブログには燃え尽きたって書いてあった。
rackとかいうのがよくわかりません Railsにとってrackはどのようなメリットがあるのでしょうか?
luck
>>612 Web サーバとフレームワーク間の泥臭い部分を、
フレームワーク開発者は書かずに済みます。
Python なら WSGI というものが。
615 :
605 :2009/03/18(水) 09:35:22 ID:???
>>606-609 セキュリティ修正は古いバージョンに適用されないじゃないですかー。
なので新しくしたら半年ぶりくらいでも deprecated が出まくったり。
また、deprecated じゃなくても、新しい書き方やスタイルが導入されているから、新たに書く人と、古いコードとのスタイルが違ったり。
数千行程度なら直すけど、数万行になると…。
なので社内の Struts 卿や Syfomy 君に、
フレームワーク自体の変更コストが高すぎると dis られる状態です…。
616 :
615 :2009/03/18(水) 09:39:37 ID:???
2.3 で CGI が Application に改名されていたり、3.x が怖いです…。 遊びでは追っかけるのが楽しいからいいのですが、 仕事では、そんなに変化しないでー、という心情。
業務は枯れてからの採用がいいよ。まだruby自体が枯れてない。
業務ならRoRではなく、俺々フレームワークがいいのかなぁ
笑わせるな
頼むからおれおれフレームワークはやめてくれ。 本人はうれしそうなんだが、周りはほんとに迷惑なんだよ。
RoR自体がヲレヲレだから大差はない。 ruby自体もヲレヲレ採用だったりもするし。 もっとメジャーな、Javaとかphpにしてくれって思ってる周りは多いと思う。
まぁRailsはその辺のJavaフレームワークよりは書籍が多いから、まだ問題ないわ。 大差ないとか言ってるやつは、さすがにかわいそうな頭してると思う。
Rails2.3でRack対応が進んだらしいけど、具体的にどんなメリットがあるんだろう?
RoRはJavaなら動き出すのに3ヶ月かかるものを半月くらいでとりあえず動かして反応見るとかそういうのに使う
>>623 * Webサーバに対する統一仕様が使えるようになる。
* ミドルウェア(認証とかログ取りとかセッションとか)を利用できる。
あたりでしょうかね。
RoR は俺々フレームワーク。仕事向きじゃない。 本があるといっても 2.x は少ないよね。 1.x じゃ、最初の scaffold からして動かないからハマりそう。 ただ、自分だけで遊ぶ分には最適。
Railsはバージョンアップ早いからなあ。 個人的にRedmineの作者はかなり頑張ってると思う。
Rails仕事で使ってるけど2.0.2・・・ jpmobileの0.3使う時、 サポートがRails2.1以降とかあったけど、 無理矢理2.0.2でも動くように変えたのは良い思い出
Railsの下位互換性の気にしなさっぷりに嫌気が差してた人たちがMerbを 盛り上げてたんだが、そのMerbがRailsに統合されることになってじゃあ どれ使ったらいいんだよ状態なのが今。 願わくはMerbの中の人たちが、Railsの状況を変えていってほしい。 ところでRailsはともかくRubyをオレオレ言語とか言ってるやつは、何も わかってないな。 それが本当なら、JRuby、Rubinius、IronRuby、MacRuby、MagLevみたい に他の実装が雨後の竹の子みたいに出てくるわけがないだろう。
RedHatがRubyの新バージョンをサポートしない限り Railsを上げられん。
野良ビルドしろ
Ubuntuを使えばよろし。 Redhatの時代はとっくに終わってる。
Debianで良くね?
DELLの保証というものがあってだな 業務で使う以上下手な事はできん
メーカー保証とか、人に責任を押しつけるためにのみ存在意義のある仕組みだが、 それによって不便を強いられるデメリットを考え合わせて、トータルで本当に得なの か考えてみたほうがいいよね。 今やPostgreSQLのほうがOracleなんかより取り回しはもちろんパフォーマンスでも 上回ってるし、Redhat<->Debian・Ubuntuも同様。
ポスグレがそこまでいいとは知らなかった。ソースはあるのか?
シンプルなSQLはMySQLよりも良いとか聞いたけど チューニングの有無で決まるんじゃね? あとSQLiteは以外と頑張る子だと最近知った
なぜOracleにboolean型がないのかわからんとは。 DBの性能は設計とチューニングで別物といっていいくらい変わるから、 そんな資料じゃ全く参考にならないのだが。
業務で使うなら、RedhatかOracleぐらいのサポート無いと使えないよ。 リナックスやDBソフトのメンテしたい訳じゃないし。 StrtusとかJSFとかJavaの世界のほうがフレームワークを業務で使い易い。書籍もセミナーも充実してるし。 こんな感じって提案するのにRoRは気軽でいいけど、そのまま運用はしないよ。メンテ大変。
企業のサポートがあるって言うけど、お世話になったことなんて セキュリティパッチやバージョンアップの通知くらいで ユーザサポートに頼ったことなんて一度もないわ 頼る必要がないくらい成熟してるとも言えるけど
ユーザーサポートは「ある」ということが重要なのだよ それが仮にあみだくじ程度のレベルであっても
そんなこと自慢げに言うなよ 自分の仕事に責任持て そういうのお役所仕事って言うんだよ
昔は企業サポートなんていらねーと思っていたが、 技術が分からないお偉いさんたちは技術云々ではなく、 自分が理解できるサポート有無なんかを気にする。 そして、技術的に意味のないサポートでも、 売上の桁が変わるので、ビジネス的に意味がある。 Rails も、技術的に最高に面白いが、 ビジネス的には変更が激しくて保守&運用コストを考えると向かない、というだけ。
>>644 言いたいことはわかるけどね、それじゃ回らない現場がたくさんあるんだよ
個々人のやる気だけではどうにもならない組織構造や大規模システム等
Rails のスレで書くことじゃないけど、 ビジネスやエンタープライズ向けのフレームワークがほしい
>>644 じゃあうっかり500万くらい損益出てもキミの貯金で補填してくれるよね
パッチ作るのも、バージョンアップチェックするのも、不具合パッチ作るのも余計な仕事。 組織で動いてると、いろいろあるからな。付加価値の高い仕事を自分たちで遣って、生産性を上げるのが高い給料の維持につながる。
と、夢を語る安い給料の人
Railsはクリステンセンが言うところの「破壊的イノベーション」に位置する 技術なんだよ。 メーカー保証のプラットフォーム上でJavaの技術者を何十人も集めて、高い 人月で何ヶ月もかけて作っていたものが、Railsなら数人で1〜2ヶ月で作れ てしまう。 大手のSIerみたいな立場から見れば、客から大した金は取れないわ、保証が ないから責任を他に転嫁できないわでロクな技術に見えないだろう。 だが市場の下の方から徐々に浸食されていき、次第に完成度も高くなって いくので、いつのまにか立場を逆転してついには既存の技術を追い落として しまう。 それを本能的に感じ取っている技術者が今、Railsに手を出してるんだと 思うんだが。 Javaやその他の枯れた技術に比べてRailsが使えないと思うなら、どうぞ そちらのほうにしがみついていてもらって全く差し支えないよ。
> メーカー保証のプラットフォーム上でJavaの技術者を何十人も集めて、高い > 人月で何ヶ月もかけて作っていたものが、Railsなら数人で1〜2ヶ月で作れ > てしまう。 んなわけねーだろ 想像で語るな 大体JavaとRailsって比較するものが違う
想像って、ここに来てるのは現場のエンジニアがほとんどだろ。 いいからRedhatやOracle買ってStrutsでも使ってろよ。そんでもうここに来んな。
単に人選が悪いだけじゃんwww Java=Strutsだとでも思ってるんだろうか
655 :
nobodyさん :2009/03/19(木) 23:38:00 ID:MR9LtcQe
「ある会社で億単位の見積もりが出されたシステムが数百万で構築できました」みたいな話も実際にでてきてるだろ
楽天とかでもRailsの生産効率の検証してて、慣れないエンジニアが作った 場合でも対PHP比1.5倍、Javaで2倍程度の効率向上が見られたみたいな ことをカンファレンスで聞いた記憶がある。 そもそもプログラマが1日に書けるコードの量はだいたい決まっているので、 余計な記述を長々と書かせるJavaの効率が悪いのは火を見るよりも明らか。 Javaの世界でもSeeSaa等の試みもあるが、あまり成功しているようには見えない。
まあSeeSaaとか使うんなら、それこそJRuby on Railsでいいじゃんという話にもなるわな。
Seasar・・・です。
そいつは失礼。 ただおぼえにくいつづりがマーケティングがうまくいかない一因になってるかもね。
RHELとか使ったことないんだけど,どういうところが嬉しいの?
まだ個人でしかLinux使ってないからだろうけど
セキュリティのアップデートとかいう話ならCentOSとかのyumみたいなので別に不満感じないけどなあ
Redhatのセキュリティのメーリングリスト見とけばそんなに問題なさそうだし
サポートってなにしてくれるんだか謎
>>648 見て思ったけど,別に不具合のせいで業務に支障きたして損失起きたからって保証してくれるわけではないんでしょ
言い訳できるんじゃね?
保障が無いならcentでいいよね
500万の損益と言われても。 損なのか益なのか。 揚げ足取りにすぎないけどさ。
>>653 数十人→数人
何ヶ月→1〜2ヶ月
何十倍なんだよ。計算もできない低脳が。
おまえがくるんじゃねーよ。
「現場のエンジニア」でひとくくりにするなwアホ。
なんだこのゆとりは。 こんなとこ来てないでちゃんと学校の勉強しろ。
Javaが登場してオブジェクト指向が注目を集めたときも、 生産効率が○○倍になったとかやってたな。結局は能力。 例外なく生産効率を劇的に押し上げたのはRDBくらいかな。
rubyも登場した頃は、生産効率が○○倍になったとかやってた。結局は能力。 何も変わらない。 億単位の案件取って儲けたほうが給料いいのに、数百万の案件にして給料安くしてるから底辺だろ。
割り算すれば出るだろ
億単位の案件なんて責任ばっか多くてやる気しねぇわ。 底辺でも数百万乱発の方がいいな。 少人数で好きなようにできるし。
生産性○倍とか幻想。 実際は、仕事量○倍が関の山w
>>663 500万の損益って言ったら益に決まってるだろ。
損なら、マイナス500万の損益か、500万の損失だ。
開発だけ見れば生産性は確かに上がるよね。 仕事量n倍は無いな。 うちは早めに仕上げてお客さんに使ってもらうようにしてるんだけど、 そうするとちょこちょこ修正依頼や仕様変更が来る。 期間内でお客さんと一緒に細かく詰めて、仕上げて行く感じ。 同じくらいの工数をかけても、お客さんの満足度は高いと思う。 あと政府系とか金額が大きい案件は、そんなに技術要らなかったりする。 金額が大きい割に暇だった。 儲けられても、技術的にはあまり面白くない感じ。
研修でJavaを詰め込んだだけのエンジニアの頭数を大量投入して人月費を稼ぎ、 客に買わせたベンダー謹製のバカ高いプラットフォーム上で、ネームバリューで 取ってきた技術力のいらない案件で何億も請求するような仕事のやり方がこの先 も続くと考えられるエンジニアはおめでたいな。 まあでもここに来て情報収集してるだけマシかもね。 自分で技術書を買うこともしなければ、新しく言語を身につけようなどという考えを 持ったこともないエンジニアが上記のような会社では大半を占めているようだが、 さっさとそういうのは淘汰されてほしい。
>>674 3年先まで有効であるだけで充分だ
見下さないと精神の安定を保てないならやめちまえ
3年やってダメになったら他にジョブチェンジすればいいと考えてるような 君と違って、こっちは一生エンジニアでやっていこうと思ってるからね。 そんくらいでやめられないんだよ。
そういう泥臭い話はマ板で。
ピュッピュッ
エンジニア()笑
条件反射的に煽るしか能のないゆとり脳がたくさん湧いてるな。 いいから涙拭けよ。そんなに慌てずに、括弧のズレくらい投稿前に確認したほうがいいぞ。
・・・
涙 拭 け よ
いくら拭いても止まらないよ
クリステンセンくらいは読んどいたほうがいいぞ。おもちゃと思われてた技術が市場をひっくり返した事例がたくさんある。
687 :
nobodyさん :2009/03/20(金) 22:01:39 ID:+2bPeyVS
そういえばJSP/Servletも当初はおもちゃおもちゃと冷笑されていたな いやたしかに最初の頃は本当にひどかったが
今のうちに億稼いでおいたほうが、いい暮らし出来るだろ。 数百万の案件なんてピンハネだけして下請けに丸投げしたほうが儲かる。
すばらしく日本のゼネコンSIer的思考の典型で清々しいが、なんでここに
来てるのかがわからん。
市場の変化を感じられるポジションにいないんだろうが、3年先と言わず
すでにそのやり方は通用しなくなりつつあるよ。
ttp://japan.cnet.com/blog/0026/2009/02/27/entry_27020722/ 秋田でベンダーが2億円と見積もりしたIP電話の導入を、市の職員が
オープンソースを活用することで800万で構築した例がちょっと前に
騒がれたが、今後見積もりの際に客からああいう例を引き合いに
出されるようになるよ。
通常、不景気の影響はIT業界に押し寄せるのは1年のブランクが
あるというが、今回は半年とたたずに影響が出てる。
あと半年もしないうちに、大手のネームバリューだけで億の案件が
受注できる時代は、もう過去のものになってるよ。
RubyやRailsは、大手SIerから中小が客を奪うための武器になるとおも。 まあせいぜい今の内に、下請けが使うおもちゃとバカにしていてくれ。 そのほうがやりやすい。
馬鹿が一人でレスしてるな…
現在のrailsはunstableだから、いくら開発効率が高くてもrailsのバージョンアップによる保守で帳消しになってしまう。 railsがstable(になることあるのか疑問だが)になったらおもちゃから脱却できるとは思うが。
>>676 他の業種にジョブチェンジも悪くないなと思ったんだが、
エンジニア失格ですか。
うちは稼働中のやつで1.2.6から2.2まで面倒見てるけど それなりになんとかなるもんだよ。
2.2→2.3の一番の変更点は、デフォルトのコントローラが application.rb から application_controller.rb に変わったとこだろう。 いきなり意味不明なエラーが出るので、この変更点を知らないとハマる。
>>696 つ rake rails:update
>>697 なるほど。そんな便利なコマンドがあったのか。
サンクス。
>>695 そりゃ力技なりで「なんとか」なるけどさ、
その必要がない選択肢があるからねー。
なんとかしなくても RoR で出来るようになると LoL
説得するのに必要なことはテスト方法だと思う
2.2.2→2.3.2にしたらvalidates_uniqueness_ofに 日本語を格納しているカラムを指定するとSQL実行エラーで例外が発生するになったので、 $RUBY_HOME/lib/ruby/gems/1.8/gems/activerecord-2.3.2/lib/active_record/validations.rb を見たら、こうなってた。 729 value = column.limit ? value.to_s[0, column.limit] : value.to_s この部分をとりあえず、 value = column.limit ? value.to_s.split(//)[0, column.limit].join : value.to_s と書き換えて対応した。 varchar(255)→255文字を意味するDBMSの場合だけど(PostgrSQL+UTF-8)とか。 varchar(255)→255バイトという意味になるDBMSなら、単にvalue.to_sだけするほうが良さそう。
703 :
702 :2009/03/21(土) 21:43:36 ID:???
ちなみに上記のエラーの根本的な原因はコレだと思う。 $KCODE = 'u' require 'jcode' s = 'テスト' s[0,5] => "テ・" 文字化けというか文字が壊れた状態でSQLが投げられて、 SQLの構文エラーが発生するみたい。
また互換性が・・・
>>705 1.8.7-p72。
スクリプトのエンコーディングはUTF-8。
ところで、文字列の扱いってエンコーディングごとに異なるのかな。
いつもUTF-8しか使っていないから、以下の動きを想定していつもコーディングしてる。
$KCODE = 'u'
str = 'あいえうお'
=> "あいえうお"
str.split(//)
=> ["あ", "い", "え", "う", "お"]
str.split(//)[0, 2]
=> ["あ", "い"]
str.split(//)[0,2].join
=> "あい"
str[0,2]
=> "?"
1.8系でstr[0,4]とかやるとバイト基準になるから、
バイト数が違うとダメだろうな。
1.9系なら文字基準だけど。
試してないからなんとも言えないんだが、
>>702 を見る限りRails2.3はRuby1.9系がふさわしいな。
>>707 DBMSがvarchar(255)→255バイトまたは255文字という
感じで仕様が分かれているから、あえてここは何もしないほうがいい気がしてきた。
実際、2.2.2のvalidates_uniqueness_ofの定義は同じ729行目でこうなっていた。
729 value = value.to_s
中小ITだと、客が相手にもしてくれないけどな。
710 :
nobodyさん :2009/03/22(日) 05:42:49 ID:CRGV4RkC
担当者によるな でその担当者が辞めると同時に仕事もなくなる
スレ違いの話題をまだ続けるのか・・・
今2.1使ってるけど3が出るまではバージョンアップしない予定 夏頃には出るんですよね?
Merbとの統合という大手術になるから、その頃安定して使えるとは思えんな。 5月のRailsConfでβという希望的観測だったかな。 正直な話、新規プロジェクトでない限りあえて最新を追いかける必要もないんじゃ。
提案に行って、最終2社あたりまで残って、 競合の事を聞いたら向こうもRailsだったみたいなことが出てきた。 結構みなさんがんばっているんだな。
Rails本体はともかくプラグインが3に対応するのに時間がかかりそう。安定するのは年末ぐらいかな
3 が安定する前に、大掛かりな修正を加えた 3 の軌道修正をするための 3.1, 3.2 を追いかけないといけないだろうな。
手元で最新版の機能を使えるのに、運用で使えないのはストレス堪ると思うが。 値段ではJavaの案件は高額だしな。RoRのほうが残るだろう。
最新の機能ってそんなに需要あるのかな? それよりメモリ食いを押さえる方が喜ぶ人は多いと思うんだ 機能が肥大化して習熟コストが高くなるのも歓迎されないと思う
>>717 言語指定されてる時点で、下っ端なのが分かるな。
>>718 開発効率が上がるような機能であれば歓迎するけどね。
2.1から使えるようになったnamed_scopeはかなり重宝してる。
今から始めるなら2.2でいいの?
まあ2.2か2.3じゃね どっちにしろ日本語リソースのみでは勉強にならないけどね
日本語リソースってなんじゃ?
ここでのリソースは参考資料・情報源といった意味でしょうな。
今さら2.2はないだろ常考。 Rack対応やらi18nやら重要なアップデートが多いので、これを使わない手はない。 そしてRuby1.9.1にRails2.3.2。これ最強。 しかし日本語の資料がほとんどないという諸刃の剣。素人にはお薦めできない。
Ruby1.9って開発版だろ。
はあ?
使ってるライブラリが1.9.1対応するまでは1.8.7つかっとけ。 hpricotとrspecが対応したから個人的にはそろそろ移行のタイミング。
今からやる初心者に2.3勧めない方がいいんじゃないかな
本がないから?
1.9.xは互換性無いからな。 普通は偶数のほうが安定板。1.9.2を待つのが正しい。
そんなに急がないなら5月に出るRails 3.xから追いかけたほうがいいかも
きりがないからおれはもう追いかけてる
下痢した
常に片思いも辛いな。がんがれ。
740 :
nobodyさん :2009/03/26(木) 20:24:41 ID:gX082xc4
そうか?普通のおっさんだと思うがなー でもDHHはガチのイケメン
アニメと漫画しか見たことがないんだろ
kokomomousuguitendesune
>>741 いや、そりゃお前は毎日鏡で見慣れてるからいいだろうけど
脳みそないよりは、はるかにいいけどな
そんな書き込みに食いつくなよ恥ずかしい。
すごい構成を考えるな。 複数ユーザーで使うなら「users」テーブルを作るんじゃダメなのか?
ですね。DB はシンプルにやってみます。 山田、田中的には URL を はてなダイアリーのようにしたいそうで、 これだけは譲れないそうです。 この URL の実現方法分かりませんか。
1人1DBとな…
ワロタw
画期的だが、ユーザ数増える毎にDBから悲鳴が聞こえてくるぞwww
普通は
>>747 のように、
userテーブルとか、blogテーブルと、entryテーブル用意するもんジャマイカ?
ちなみにroutes.rbで書くなら
map.connect ':controller/:action/:id'
map.connect ':controller/:action/:id.:format'
の下に、
map.connect ':user_name/:action' ,:controller=>'コントローラー名'
って感じになるかの?
なんで下なんだ
> 1 人 1 DB 数人しか使わないし、 各テーブルの select や書き込み時に user_name の条件を書くの面倒だなーと思いましたが、 佐藤&鈴木と相談し、正攻法で 1 DB にしてみます。 > map.connect ':user_name/:action' ,:controller=>'コントローラー名' なるほどー。佐々木&森田と調べてみます。 ありがとうございましたー。
上から順に評価されて、マッチした所に行くから。 map.connect ':controller/:action/:id' の上に書くと、 他のコントローラーに送りたくても map.connect ':user_name/:action' ,:controller=>'コントローラー名' の方が有効になる どうしても上に書きたいなら map.connect ':user_name/:action' ,:controller=>'コントローラー名' , :user_name=>/tanaka|yamada/ と限定させれば有効になるけど。 ユーザ増える度にroutes.rb追加するのはダリィ
usersテーブルのidカラムを文字列にしちゃえよ やったことないから実はめんどいのかもしれんが
1人1DBにする必要が全く無いな。
755 :
751 :2009/03/27(金) 17:36:57 ID:???
>>752 下に書くのでバッチリでした。堀江&三木谷も喜んでます。
>>753 select & update の時に自動で user_name の縛りを入れてくれる仕組みがあるといいんですけどねー。忘れるとエラいことに。
756 :
nobodyさん :2009/03/27(金) 20:12:28 ID:1ySFVXM2
質問させてください。 script/console で User.all ようにしてDBのレコードの配列を取得したのですが、このあと同じカラム、例えばidカラムのレコードだけ抽出した場合はどう書けばよいでしょうか?? ご教示いただきたくm(_ _)m
>>755 user = User.find_by_name(params[:user_name])
articles = user.articles
な話?
>>756 User.find(id1, id2, ...) したいのか
User.all.map(&:id) したいのか
User.find(:all, :select => 'id') したいのか
758 :
756 :2009/03/27(金) 22:18:50 ID:1ySFVXM2
レスありがとうございます。 >User.find(:all, :select => 'id') これです。 User.all... のような書き方で同じことはできないのでしょうか??
バージョン管理でgit使ってる人いる? よほど巨大なプロジェクトでも無い限り、メリットなさそうなイメージなんだけど…
githubからzipやtarで落とすなんて耐えられないから使ってる
ユーザいっぱいだと、グーグルクローラが来ただけで氏にそうだなwww あとユーザ名の所のURLとかから攻略できそう。
>>758 def all(*args)
find(:all, *args)
end
なので(定義はAR/lib/active_record/base.rb)
User.all(:select => 'id')
と出来るね。
763 :
nobodyさん :2009/03/28(土) 06:52:47 ID:fhVnMpn3
>>760 ローカルでコミットできるのでそれだけでも超便利
あとgithub最強
何言ってるんですか gitはgithubの専用クライアントですよ
Rails+PostgreSQL8.3で始めてみました。 フォームのテキストボックスで何も入力しないで更新すると、 DBにNULLじゃなくて空文字列が入ってくるんですが、 これは設定でNULLにできないんでしょうか。 コントローラーで変換してもできると思うんですが、 毎回同じ修正をするのはバグがでそうなので。
例外なく空文字列が入ってきたらNULL(nil)に変換したいので、 ApplicationControllerに定義すればできるかなと。 モデルならなおいいんですが、すべてのカラムで毎回指定するのはちょっと。。。 でも、考えてみたら数値型や日付型に空文字列が入ってきたらNULLになるので、 どこかにモデルの設定があるのかなと思いました。探してみます。
Web系やってるやつなんて、nullと空文字の区別なんてほとんどしてないよ 区別があるってことすら知らないやつも結構いると思う
そんなわけないだろw
>>759 他の連中をgitに移行させようとするのが面倒なので
とりあえず自分だけ git-svn 使って我慢してる
771 :
nobodyさん :2009/03/29(日) 05:33:23 ID:SRpsbxpf
Web系やってるやつなんて、nullと空文字の区別なんてほとんどしてないよ 区別があるってことすら知らないやつも結構いると思う
phpレベルだしな。DBAの常識はコボラー並みに通用しない。
773 :
nobodyさん :2009/03/29(日) 10:04:29 ID:7sf+X/id
WEBアプリはNULLを扱うより空白を使った方が色々と使い勝手がいいよ 内容の空チェックには「hoge.blank?」を使えばおk
色々の具体的な例ってどんなだ? blank?を使うのは、データをRailsで取得したあとだろ。 取得したくない場合は、「is not null」とか条件をつけたりするが、 NULLと空白を意識してないのに、両方混在するときついんだが。 「論理的には同じ意味でーす」みたいな感じだから条件が増えてばかにならん。 それにユニーク制約とかどうするのよ。 NULL許可でも空文字で入ってきたらはじかれるじゃん。 でもそんなことを意識してるWebプログラマーは少数派。
>>774 仕事でWebやっているけど、
そんな連中には会ったことないぞ。
プログラム未経験の新卒くらいじゃないのか?
776 :
775 :2009/03/29(日) 10:46:50 ID:???
ん、なんか書き方おかしいな。 NULLと空白の違いを意識しないやつには会ったことないって意味ね。 しかし、本当にそんな変なやついるのかな。 素人以外で。
>>776 そういうレベルの人間がいるような環境で仕事してるんだろ。
俺もnullと空文字列を同じものだなんて捉えてる奴は見たこと無いな 大学になら居たかも知れん
PHPだとどっちもfalseだからね。 PHPしか知らないエンジニアなら、区別がつかんかもしれん。
じゃあPerlしか知らないエンジニアは 0 と "" と undef の区別がつかないんだね
区別してるって言ってるやつは、DBにどっち入れてるの?
NULLの伝搬はいやらしいから、可能なものはNOT NULLがいいなぁ。
×伝搬(でんぱん) ○伝播(でんぱ)
NULLの伝播って意味わからん。 伝播ということはどこかをNULLにするとほかに波及するってことか?
Rubyにはnilがあるじゃんよ
migrationファイルで、 t.string hoge :null => false t.string hage :default => nil みたいに、nullとnilの表現が混在して、一瞬どっちがどっちだったか まぎらわしくなることがある。
787 :
nobodyさん :2009/03/29(日) 17:58:33 ID:Uytn6itq
今度初めて Rails を使ったプロジェクトにアサインされることになりました。(Rails 2.1.1) (自分は、Rails や Ruby は未経験) 本を一冊買おうと思うのですが、どれがいいでしょうか? Ruby の本と、Rails の本をそれぞれ1冊ずつ買おうと思います。 (Ruby の本はム板の「Ruby 初心者スレ」で検討しています。) 自分は Java は経験が長く、PHP / C / Perl はある程度書けます。 amazon で調べると 「RailsによるアジャイルWebアプリケーション開発(第二版)」が定番の本らしいですが、 この本は Rails 2.0 系に対応してないのですよね? できれば 2.1 系に対応している本がいいのですが、(そうでなくても)いい本があれば教えてください。
対応してなくても、初心者にとってそれ以上の本は今のところない。 2系の追加機能については最後のほうでちょこっと触れてたはず なので、補完しながら読めば問題ない。
一から作るのか既存のシステムのメンテか、 教えてもらえる人がいるのかいないのかで違ってくるんじゃないだろうか。 どっちにしてもリファレンス本は別に1冊あった方がいいよ。 リファレンスなら、 Railsレシピブック(ソフトバンク) ←ものすごく無難な感じ The Rails Way(翔泳社) ←少しがっつりやりたい人向け。RSpecを使うならこれ Ruby on Rails 逆引きクイックリファレンス(毎コミュ) ←割と実戦的 があるね。一応どれも2.0に対応してるよ。
791 :
787 :2009/03/29(日) 18:53:47 ID:Uytn6itq
レスどうもありがとうございます。
いま amazon を必死に眺めてますが、
「10日でおぼえる Ruby on Rails入門教室」が気になってきました。
あと少ししたら本屋に行ってこようと思います。
>>790 新規システム開発で、プロジェクトそのものは製造フェーズに入り始めたところらしい。
人が足りない&デスマになってきたのでアサインされたそうです。
まだ中身を見ていないのですが、
> Ruby on Rails 逆引きクイックリファレンス(毎コミュ) ←割と実戦的
これは逆引きとのことですが、これを使って勉強するのは、ちょっと目的が違いますか?
前提知識がないところに参加ってのは、ブルックスの法則を実体験する羽目に なるおそれがあるから、基本から予習しておいたほうがいいな。
793 :
758 :2009/03/29(日) 20:02:37 ID:P4wqMwA6 BE:1534270875-2BP(0)
>>779 それはあいまいチェックの場合だろ===でやれば通らない
>>791 製造フェーズに入り始めなのにデスマになりかけとはご愁傷様
リファレンスは部分部分を解説してるから、
全体が分からないときついと思うよ。
逆引き〜はいい本だと個人的には思うけど、それだけで勉強するのは無理だと思う。
「10日でおぼえる Ruby on Rails入門教室」は、
徹底してテスト駆動開発のスタンスをとってて、
Railsでの開発の基礎固めにはいいと思うよ。
デスマだとテスト駆動とか無視される可能性大だけど。
ちょっとだけどRubyの基礎みたいなものも触れてるから、
買うならはじめはそれ1冊をやるといいかもね。
欠点は
・1.2系が対象。2系との差は意外と無視できない。
違いを知らないとスキャフォールドの生成すら苦労する。
・目次が不親切。リファレンスとしては使えない
「あれやるのってどこに書いてあったっけ?」と思って後から探しても見つからない。
・広範囲にやりすぎて、まとまりがない
7,9,10日目はいらないと思う。「ゲームアプリの作成」とかいらんちゅーの。
その代わりActiveRecordとかについて、もっと突っ込んだりしてほしかった。
Rubyそのものの入門書はオライリーの「はじめてのRuby」がダントツおすすめ。
多言語の経験ある人むけだけど、Javaメインで結構あるみたいだから。
電波の伝播
ここのスレの住人に聞いてもあまりいいものは得られないぞ 本気でRailsやってるやつは少ないと思う。過去のレス見てみ ほとんどは趣味レベル
rubyでデスマってる時点で危険だよな。どんだけ低レベルなのかと。 あとRoRなんて採用しちゃって運用も大変だと思う。 ゲームは販促上は重要。実践的ではないにしろ。
RailsやRubyだからとか、言い訳するのは確かにレベル低いね。
>>799 じゃあ全部Cでやればいいじゃん
Cでなんてありえねーよ、と思ったのなら、それは道具の必要性の傍証
801 :
787 :2009/03/30(月) 14:13:17 ID:???
>>795 詳しいレスどもありがとうございます。
本屋で「10日〜」と「RailsによるアジャイルWebアプリケーション開発」を
読み比べてましたが、2冊買ってもそこまで読む暇もないだろうということで、
「Railsによるアジャイル〜」を買ってきました。
「10日〜」のほうが読みやすそうだったのですが、
>>795 さんの言うとおり
・こっちも 1.2 系準拠だったのと、最後の方は業務で使わなさそうと思った
・scaffold や migratoin が知りたかったが、「Rails によるアジャイル〜」のほうが載ってるっぽい
・「Rails によるアジャイル〜」も、前半部分は、「10日〜」と同じようにチュートリアル形式で
勉強していけそう
「逆引き〜」は、もうすこし RonR がわかってから、必要であれば読もうと思います。
あと多少スレ違いですが、Ruby そのものの入門書は、「初心者スレ」でも好評だった
オライリーの「初めてのRuby」を買ってきました。
>>798- Ruby でデスマ
すでに加入している人に聞いたところ、いまデスマっている要因は、上流工程によるもの
(設計書が全然fixしない。こっちのヒアリングの仕方が悪いのか、顧客が無理を言っているのかはわからないけど)
だそうですが、RonR(というかRuby)経験者もほとんどいなく、1機能だけ先行して開発しているが、
これも全然うまくいっていないそうです。
上流工程がうまくいっていなくても、開発に入った段階でリスクが少ない技術を
選んでいれば(自分だったら Java になりますが)、ある程度リスクや工数を読めますが、
今の状態だと、開発に入ってからも全然安心できない、と言っていました。
余談ですが RonR を指定してきたのは顧客だそうです。
# それを言い訳にしたいというわけではない。あきらかに案件に RonR が合っていないのならば
# 顧客にそういうべきだし、そもそも自分たちが RonR でやれる自信がないのであれば
# 受注しないほうがいい
まぁこれを機に RonR が覚えられればと思って、大変そうだけどがんばろうと思っています。
802 :
nobodyさん :2009/03/30(月) 15:50:15 ID:bIKocM1V
>>774 ちょっと勘違いしてないか?
テキストエリアの値が空文字でDBに保存さてれるのは、未入力の場合該当パラメータが空文字で送られてきてるから
該当カラムの値をnilにして保存すればDBにはNULLが格納される
なぜ未入力が空文字で送られてくるのかというと、そのほうが色々都合がいいから
・nilを許可する場合、メソッド実行前にnilチェックが必要になる
・空で更新されたのか、本当にNULLなのか見分けがつかない
・IS NULL検索時にインデックスがきかないケースが存在する
・NULLの扱いがDBの実装によって異なる
俺からしたら空白で統一されているものを、なぜわざわざ
コアをいじってまでNULLを混入させようとするのか謎なんだが
ユニーク+NULL許可というレアなケースを実現したいならなら、その場合だけ
フィルタ使ってnilに置き換えたらいいんじゃない?
・nilを許可する場合、メソッド実行前にnilチェックが必要になる ↓ すまん、これよくわからん。なんのメソッドだ? バリデーションが必要ということか?:allow_nilオプションのことだろうか。 ・空で更新されたのか、本当にNULLなのか見分けがつかない ↓ 実際はNULLかもしれないのに、 空が入ってくると見分けがつかないとも言える。実際混乱する。 データがWeb経由のみから入ってくるとは限らない。 たとえば、 select count(column_name) from table_name とやると、column_nameの値がNULLの時はカウントされない。 有効なデータ件数のカウントすらつまらん条件を入れることになる。間違いのもと。 ・IS NULL検索時にインデックスがきかないケースが存在する ↓ ビットマップインデックスならきく。 B-Treeの場合、カーディナリティーが重要になる。 絞り込み条件によってデータがざっくり15〜20%くらいまでは最低でも絞り込まれないと、 フルスキャンの方が速くなる。 形だけNULLにするとインデックスがきくことによって逆に遅くなったりする。 ・NULLの扱いがDBの実装によって異なる ↓ Oracleあたりは両者を区別してないね。というより空白はNULLで格納される。 それと空白が都合がいいという結論とどう結びつくのかわからん。 むしろ空白だと思ってたのに、NULLが入ってましたなことになるんだぞ。 where column_name = '' とかやっても絞りこまれんぞ。 Web系は特にDBまわりの扱いがおおらかすぎ。データが汚いと余計な苦労が増える。
形だけNULLにするとインデックスがきくことによって逆に遅くなったりする。 ↓ 形だけNULLを空白にするとインデックスがきくことによって逆に遅くなったりする。
ActiveForm 以外にフォームを作る DSL はありませんか? できれば YAML, 配列, ハッシュなどで記述できると嬉しいです。
807 :
nobodyさん :2009/03/31(火) 00:58:24 ID: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
コントローラは一部ソースを切り出してるのかなと思うけど、 モデルはそれで全部なの?実際にブラウザで確認した結果、そのエラーが出たのかな?
809 :
nobodyさん :2009/03/31(火) 01:42:31 ID:oWRq8GzN
>808 ブラウザで確認した結果上述のエラーがでました。 モデルでは、入力された値のチェックを行っていますが StoreコントローラではProductに入力は行われないので省きました。 情報を書ききれてなくて申し訳ないです。
というか、エラーメッセージとスタックトレースはいずこ。 コード的には間違ってないと思う。(salableはsellableのような気がするけど)
>>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
脱線だけど、2.1ならnamed_scopeで書くことも出来るね。
>>812 たいしたことない省力化のようにみえて、何気に便利だよな
814 :
nobodyさん :2009/03/31(火) 13:01:11 ID:ZMAhYize
初心者質問すいません。 viewからcontrollクラスのメソッドを使うことってできないのでしょうか?? 例えば、ApplicationControllerクラスに現在自分がログインしているユーザーのIDを取得するメソッドを定義しておいて、それをviewから使いたいようなことがあると思うのですが、どうするのがベストなのでしょう?? 教えて頂けると幸いです。
コントローラでインスタンス変数に代入しておく。
restful_authenticationとかを使ってるなら、 current_user.id みたいにヘルパで取れる
コントローラーで @hoge = now_login_user みたいにインスタンス変数に入れておけばViewで以下のように使える <= @hoge >
helper_method :my_method
819 :
809 :2009/03/31(火) 21:29:42 ID:???
>811 文法的にはあっているということでまるまる書き直してみたら動きました。 有難うございます。
820 :
nobodyさん :2009/04/01(水) 03:46:07 ID:i7k4rzu/
>>803 ・nilチェック
アプリケーション層の話だな。フォームの未入力項目がnilでくるなら、
カスタムバリデーションを書くときになどに、常にそれを想定して
メソッドを呼び出す前にnilチェックをする必要がある。
空文字でくるなら、その必要がない(不正なデータなので例外で一括キャッチできる)
・count
NULLを表すデフォルト値を省くのがそれほど複雑な条件とは思えないし、
明快さを望むなら有効/無効を表すフラグを持てばいいかと
・NULLの扱い
意図としては、アプリ層のロジックがDBの実装に依存するのはいやよネーという話だったんだが
Oracleが手元にないので確かめられないけど、SQL直たたきでないfindをつかって
column_name = '' でNULLを引っ掛けられませんか?
だとすると空文字/NULLでレコードの有効無効を判断する処理はDB依存になるな・・・
面倒なorz
しかし、オブジェクト指向的(というかRuby的?)には空文字とnullが別物というのは自然なように思えるんだが、
DBな人にはそうでもないんだろうか
SQLのIS NULLをたまには思い出してあげてください。
「有効/無効を表すフラグ」はあり得ないだろw オラクルは古いDBというのもあって負の遺産も引きずってるからな。 長さゼロ文字列とNULLは今後区別するかもしれません、 と何年も言ってるが影響がでかすぎて一向に変わらん。 たぶんずっと変わらないと思う。その点Railsはやりたい放題だよなw
めちゃくちゃです
どんなのがベストプラクティスでしょう?
826 :
814 :2009/04/01(水) 19:55:35 ID:TXtYORpd
ありがとうございます! すいませんもう一個質問させてください。 Sampleモデルクラスのオブジェクトが入っている配列 arr からSampleクラスがbelongs_toしているTestモデルクラスのオブジェクトを配列の要素ごとに全て得たい場合は、 arr2 = [] arr.each do |v| arr2 << v.test end みたいにループ文を回して取得するしかないのでしょうか?? arr2 = arr.ほにゃらら みたいな形式で取得できたら便利だなーと思うのですが・・
arr2 = arr.collect(&:test) ちょっと暗号じみてるけど、これは arr2 = arr.collect {|v| v.test } と同じ。collectはmapと書いてもいい。
>>826 が欲しいのは、もしかすると
arr2 = arr.collect{|v| v.test}.flatten
じゃないかな。違ったらごめん。
Smalltalkを習ったので、俺もcollect派。
BagやSetが時々欲しくなる。
>>825 モデルにカスタムのバリデーションを追加する手段はちゃんと提供されてる。
コントローラーは振り分けを行ったり、全体の制御を行うところ。
こんなごちゃごちゃのめちゃくちゃにするなら、
最初からRailsなんて使わなきゃいいのにと思う。
830 :
nobodyさん :2009/04/02(木) 08:49:27 ID:6GTBW0dp
831 :
825 :2009/04/02(木) 09:29:35 ID:???
>>829-830 ありがとうございます。了解しましたー。
モデルにカスタムのバリデーションを追加する情報 ( ドキュメント ) なりを教えてもらえませんか。。。
モデルクラスの中にオーバーライドして使ってね つvalidate つvalidate_on_create つvalidate_on_update
833 :
825 :2009/04/02(木) 11:42:16 ID:???
>>832 ご親切にありがとうございます。
ちゃんと用意されているのですね。素晴らしい。
835 :
834 :2009/04/02(木) 18:14:31 ID:???
質問です。 あるフィールド(複数の場合も)からの計算結果を表示したいとき、 メソッドはモデルに置くのとビューのヘルパーに置くのと、どちらが適当なのでしょうか。 例えば、purchase_dateという日付のフィールドがあるとき、 どこまで正確なのかを表すのにpur_date_qualというフィールドにY, M, Dの どれかを入れておいて、Yなら年だけ、Mなら月までを表示させたいとき、 このメソッドはモデルとヘルパーとどちらに属すのでしょうか。 モデルに置いた場合は他のデータベースでもよくある計算フィールドのイメージで、 オブジェクト指向的にはこちらが正解のような気がするのですが。
837 :
nobodyさん :2009/04/03(金) 21:12:20 ID:0BZVS1Kz
モデルに別名でアクセサつけるか 面倒くさそうならヘルパ使うかなー
838 :
nobodyさん :2009/04/03(金) 23:11:23 ID:gpEgAnUB
「scalaでも使え」と言ってみたら?
>>838 トップから画像数枚眺めてみたけど別に重くはなかったぞ
最近こういう画像投稿サイト多いね しかもどこもそこそこ盛況なようで結構なことですな うちの会社の自社サービスなんて2年たって会員数2桁ですよwww マネージャは冷や飯くらったらしい
アクティブユーザーは2人くらい?
>>841 どうやったらそんな奇跡的な会員数になるのか興味あるな。
会員全員社員
845 :
826 :2009/04/04(土) 15:52:57 ID:ZJouk0fd BE:1402761784-2BP(0)
つーか自社サービスにすればおkって見通しがそもそも甘い。
848 :
845 :2009/04/04(土) 17:41:25 ID:ZJouk0fd BE:350691124-2BP(0)
>>847 なるほど〜。ありがとうございます!
複雑ですがやっぱり便利ですねruby・・
849 :
836 :2009/04/04(土) 22:55:38 ID:???
>>837 ありがとうございます。とりあえず、モデルに定義することにします。
Railsで Access のような業務アプリを作るとき,帳票印刷はどうしてますか? あと,ショートカットキーで入力フォームを行き来したりするのはHTMLだと難しいと思うんですが, そういうインターフェース面はフォームのボタンをマウスでクリックしてもらうしかないのでしょうか?
そういうのはクライアントサイドだから言語はあまり関係がないぞ。
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やその他の環境の皆様はどうしておられますか? もし、他に該当スレがあれば誘導してください。
854 :
nobodyさん :2009/04/05(日) 20:35:25 ID:a/bIl6WE
>>853 WindowsのコマンドプロンプトでUTF-8を表示する方法がある。
>>854 そういうヘルパを書けば良いだけでは。
link_toの第一引数が無くて、中ではurl_forを使うやつ。
>>854 link_to は第一引数に nil 渡すとURL文字列にリンク張ってくれるよ。
<%= link_to nil, :controller => :foo, :action => :index, :only_path => false %>
857 :
nobodyさん :2009/04/05(日) 23:08:02 ID:J2cktlyk
form で Validation エラーになると link_to_unless_current が上手く動作しなくなる・・・。 どうも form の Submit 先の URL が 「/shops/1/items」 みたいに「new」とかがない状態で生成されるからみたいなんだが、これってどうすればよい? 単純に redirect_to してしまうと Validation のエラーメッセージが消えてしまうし・・・。
>>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
確認画面無しなのか。羨ましいな。 確認画面入れるといろいろと面倒なんだよね。 IEだと入力画面でAjax使って入れた値が消えてくれたりとか。 自分なら、 render :action => :new and return unless @shop.valid? と1行で書くかな。
>>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
おれはコントローラにstate持つようにして、それでアンカーのON/OFFを切り替えるようにした RESTを厳密に適用していくと、URIは(人間系の)画面表示から独立したものとして扱われていくような気がする アンカーのON/OFFは人間系の処理なので、URIからどうこうするのは無理が出てくるのではないかと思う つーか、routeの別名からアクセスしただけでも動かなくならね?的な柔軟性のなさが使えなさすぎるw リダイレクト時のvalidation結果保持は俺も欲しいのよね・・・ エラーメッセージだけとかデータ量が小規模ならやりようがないこともないけど リダイレクト時にエラーメッセージをあらかじめレンダリングしておいてflashで渡したりとか、シリアライズしたバリデーション結果をflashで渡したりとか データ量が多い場合は使えないから、システム全体の統一感が崩れるのでやらない POSTリダイレクトとかできんかなとも思った
863 :
nobodyさん :2009/04/06(月) 14:49:19 ID:eCZIYZ8I
まぁ仕様を満たしていて不具合とかなければいいんじゃない?
Vista ユーザで
ttp://kabus.dreamhosters.com/chm/rails/ にある chm が開けてる人いますか?
2.1.x や 2.3.x をいろいろとダウンロードしても
・起動時、セキュリティの警告が出る
・気にせず開いても「Web ページへのナビゲーションは取り消されました」と出る
・ただし目次、キーワード、検索は動く
という感じ。
rubymanjp.chm は問題なく動くのだけど。
ruby:1.8.7 rails:2.1.0 でやってるんだけどto_dateって使えないの? ググったら1.8.6だとprivateメソッドで定義されて〜 とか書いてたけどto_datetimeやto_timeとかもundefind methodになる…
>>865 irbで試したけど、2.3.2では使えてる(Rubyは1.8.7-p72)。
require 'rubygems'
require 'activesupport'
"20090406".to_date
867 :
865 :2009/04/06(月) 23:47:30 ID:???
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にするよ。
その部分のソースだけコピペすればいいじゃん
ActiveSupportのソースを見ればいいじゃん
>>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
872 :
nobodyさん :2009/04/07(火) 08:47:39 ID:BAwL1OSs
gem serverはキーワード検索機能があるともっと便利だよね
>>864 よくある話で、IEでchmをダウンロードするとそうなるかも。
chm右クリックでのプロパティでセキュリティのチェックをはずすかつけるかするとみられるはずですよ。
874 :
853 :2009/04/07(火) 11:22:41 ID:???
>>855 > WindowsのコマンドプロンプトでUTF-8を表示する方法がある。
MSゴシックで、chcp 65001するやつですよね。
chcp 65001すると、何故か、autotestコマンドが動かないんですよね…。
何も出力されずに終了してしまう。chcp しないとちゃんと動く
うーん…
875 :
853 :2009/04/07(火) 11:33:13 ID:???
chcp 65001だと、irbも動かない(起動してすぐに終了してしまう)ですね。変なのー
876 :
864 :2009/04/07(火) 11:45:20 ID:???
>>873 ありがとうございます!
Fx 使いだったので、chm 右クリックして「ブロック解除」で見られるようになりましたー。
>>864 エクスプローラーから、そのchmファイルのプロパティ出して
セキュリティの項目のブロックの解除、をやる。
ダウンロードしたchmファイルはVistaではこれが必要。
セキュリティの項目って全般タブの一番下ね
ってギリギリ遅かったか なんというタイミングだw
880 :
853 :2009/04/07(火) 12:04:33 ID:???
原因わかりました。chcp 65001だとバッチファイルが動かないみたいです。 直接、 ruby (rubyインスコしたディレクトリ)\bin\autotest としてautotestを起動したら無事に動かせました。 irbとかは chcp 65001だと日本語入力がそもそも効かずだめですねw ありがとうございました。
881 :
853 :2009/04/07(火) 12:18:13 ID:???
>>880 でいけたと思ったのですが、やはり駄目でした。
日本語が ・・・・・・・ と点で表示されてしまうようです。
また、いろいろ試してみます。それでは失礼します。
そりゃフォントのせいだけどな
883 :
864 :2009/04/07(火) 15:53:52 ID:???
>>868-870 ありがとうございました。
to_dateはクリアできました。
で、今配列に{Sun, 19 Apr 2009=>[], Fri, 10 Apr 2009=>[],…}
ってな具合に1月分date型で入ってるんだけど
Tue, 07 Apr 2009 ←今日の日付
とinclude?するとfalseになる。
=>[]があるからfalseになるのかな?
include?って完全一致?
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
886 :
854 :2009/04/08(水) 13:05:31 ID:yKX835d9
<%= link_to nil, :controller => 'cups', :action => :show, :id => params[:id], :only_path => false %> これでいけました!レスくださった方々ありがとうございましたm(_ _)m
887 :
853 :2009/04/08(水) 14:17:09 ID:???
結局、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
888 :
853 :2009/04/08(水) 14:46:23 ID:???
>>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
rails のルートディレクトリを取得できるヘルパーなりはありませんか? 現在は File.dirname(__FILE__) + "/../log" とかやっているのですが、 RAILS_ROOT + "/log" とかできるといいなーと。
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 が使えるようになりますか?
>>889 自分で試してみたの?
普通にRAILS_ROOT使えるよ。
最近は Rails.root (Rails.env とか Rails.loggerもあるよ!)
>>892 お、それは初めて知った。
今試してみたら、Rails.rootはPathnameで返って来るんだね(RAILS_ROOTはString)。
894 :
nobodyさん :2009/04/09(木) 00:12:20 ID:Hon6X4Il
895 :
853 :2009/04/09(木) 01:42:24 ID:???
>>888 なんですが、require "win32/console/ANSI" が絡むと(+ rspecオプションで--colur)、
文字化けしまくりで、
直すのやっかいそう&そろそろrails関係なさげなので、本スレの方に行ってきます。
896 :
nobodyさん :2009/04/09(木) 10:06:46 ID:8toP/BB5
2.2.2 で gettext で動かせてる人っています? もしいたらバージョンと設定方法教えてもらえないでしょうか・・・。
2.2.2では、Rails標準のi18n使った。 その頃gettextは対応してなかったので。 gettext 2.0.0 出たし、いまはどうか分からないな。
898 :
896 :2009/04/10(金) 00:58:01 ID:???
>>897 レスありがとうございます。
やっぱり無理なんですかね・・・。
公式に「無理!」って情報とかってあったりするんでしょうかね・・・。
ちなみに、i18n を使う場合、メールの iso-2022-jp 周りとかってやっぱり自前になるんですか?
899 :
nobodyさん :2009/04/10(金) 08:58:13 ID:4tZH5Ujq
そうなるね。 でも、iso-2022-jpで送信する方法は検索すればすぐ見つかるから苦労しないと思う。
iso-2022-jp の場合、日本語の添付ファイルが化けるけど、 RFC 違反だけど、多くのメーラで文字化けしない方法ってあるよね? その ruby 版のコードってどこにありますか?><
それコントローラーのメソッドなのか?モデルじゃなくて?
activerecord-2.3.2/lib/active_record/base.rb にあるものだけど、2.3.2 になってスペルミスが修正されたみたいなのです。
904 :
853 :2009/04/10(金) 14:04:46 ID:???
>>888 ・win32/console/ANSIのせいで、rspecオプションに--colourつけると文字化けする
(というかstdout.writeを上書きできてない)のを修正した。
・UTF-8→SJISの変換の際に、Kconv.tosjis使うと半角カタカナが全角になったり、
MIMEが変換されたりするのを防止するためにnkf使うように修正
---- spec_helper.rb への追加コード ----
require "nkf"
# convert $stdout to sjis for command prompt at Windows
if !defined?($stdout.old_write_for_sjis_filter) &&
RUBY_PLATFORM =~ /win32/ && ENV['TERM'].nil?
class << $stdout
alias :old_write_for_sjis_filter :write
def write(str)
# change to sjis AS IS
old_write_for_sjis_filter NKF.nkf('-sxm0', str.to_s)
end
end
# puts "overrode $stdout.write"
end
何回もうざくてゴメン。たぶんこれで最後です。
905 :
853 :2009/04/10(金) 14:05:38 ID:???
>>904 ぎゃーインデント崩れた。うざいのでそろそろブログの方に書きます
require "nkf"
# convert $stdout to sjis only command prompt at Windows
if !defined?($stdout.old_write_for_sjis_filter) &&
RUBY_PLATFORM =~ /win32/ && ENV['TERM'].nil?
class << $stdout
alias :old_write_for_sjis_filter :write
def write(str)
# change to sjis AS IS
old_write_for_sjis_filter NKF.nkf('-sxm0', str.to_s)
end
end
# puts "overrode $stdout.write"
end
>>901 たぶんActiveForm使ってる?
2.2から国際化の仕組みが入ってて、そのままだとエラーになるみたい。
自分はActiveFormのコードを修正して対応したよ、以下参考に。。。
active_form.rb
class << self # 51行目くらいの所に下のコード追加
def self_and_descendants_from_active_record
[self]
end
def human_name(*args)
name.humanize
end
end
もしくはここから新しいやつ落としたほうがいいかな・・・。
ttp://github.com/cs/active_form/tree/master
いやもう動かしてる人いるし。その記事より前に。
直接Railsが動くようにしてほしいのだが。Amazonはできるのに。
Rails 2.3からリクエストの結果がキャッシュされるようになりましたが このキャッシュを特定のアクションでキャッシュさせない事はできるでしょうか。 Ajaxのリクエストがキャッシュされ、 前回実行時の結果がレンダリングされてしまうのを防ぎたいのですが。
Ajaxのリクエストってよく分からんのだが。 Javascriptで描画した内容が元に戻るってこと?
CSS同様、ブラウザの実装次第じゃないの?
>>913 >Rails 2.3からリクエストの結果がキャッシュされるようになりましたが
こういう認識に至ったのはどういう訳で?
917 :
913 :2009/04/12(日) 22:23:27 ID:???
>>916 Rails2.3のリリースノートです。
5.8 Improved Caching Performance
Rails now keeps a per-request local cache of read from the remote
cache stores, cutting down on unnecessary reads and leading to better
site performance. While this work was originally limited to
MemCacheStore, it is available to any remote store than implements
the required methods.
実際にどういう箇所で問題が起きているかというと、モーダルです。
1. モーダルをAjaxで開く
2. モーダル内で何か操作を実行(モーダル内のHTMLがAjaxで書き換えられる)。
3. モーダルを閉じる
4. モーダルを再び開くと、2.の結果がそのまま表示される
という状態です。
こちらとしては、モーダルを開いたら初期状態でモーダルの内容が
表示されて欲しい訳です。
Rails2.2まではその通りの動作でした。
しかし、Rails2.3に上げた所、
モーダル操作後の結果がキャッシュされるようになってしまいました。
4. の再びモーダルを開く際には、モーダルが開いてもコンソールログは出ません。
なのでリクエスト自体がキャッシュされていると思います。
918 :
913 :2009/04/12(日) 22:33:52 ID:???
ブラウザはFirefoxとSafariで試してみました。 少し自分で2.3.2のソースを読んでみようと思います。 お騒がせしました。
本当にリクエストをうってるかを確かめる方が先なのでは。 キャッシュされているというのは推測みたいだし。 Parosとかのパーソナルファイアーウォールを使えばリクエストもレスポンスもキャッチできる。
パーソナルファイアーウォール ↓ ローカルプロキシ 間違えた・・・
local cache storeとremote cache storeって何だろう。 remoet cache storeの例にMemCacheStoreが挙げられているから、 localってのはRails Framework側で持ってるcache storeのことなのかな。
922 :
nobodyさん :2009/04/13(月) 03:33:44 ID:Mmo44XLB
link_toをモデルクラスで使いたいのですが、どうすればいいでしょうか?? そもそもモデルクラスでlink_to使おうとするのは邪道でしょうか? 教えていただけると幸いです。
>>923 タイトルくらい貼ろうぜ
Twitter、Ruby on RailsからScalaへ - スラッシュドット・ジャパン
http://slashdot.jp/developers/09/04/10/0421223.shtml Twitter は Ruby on Rails で構築されたそのインフラを徐々に Scala に置き換えているそうだ (Technology Review の記事, 本家 /. 記事) 。
Twitter ではフロントエンド、バックエンド共に Ruby on Rails が使われていたが、
最近では大量のメッセージを処理できず「Fail Whale」出現の原因となったりしていた。
このため Twitter の開発チームは代替言語として Scala を採用、少しずつバックエンドや
インフラを Scala に置き換えているそうだ。スイス連邦工科大学ローザンヌ校の
Martin Odersky 氏によって開発された比較的新しいプログラミング言語である Scala は
並列プロセスの処理に長けている点が Twitter に向いており、
また言語としてのフレキシビリティも開発にとっては魅力とのこと。
短所としては、機能も多く、シンタックスも見慣れた感じでは無いため習得が簡単ではないことと、
新しい言語であるため実績がまだ少ないことだという。
それでもTwitterでは多くのテストケースを成功させており、Scala の方がメリットが多いと考えているようだ。
開発チームはフロントエンドは Ruby on Rails のまま、
年内には API リクエストの一連の処理を Scala で行えるようにしたいとしている。
こっちにはまだ貼られてなかったのか。
MQ の部分でしょ。Scala でも Erlang でもご自由にとしか。 あと、計算なら C でもいいし。 フロント部分が Scala/C はありえんけど。 言語は使い分け。
まえ初心者スレだったかに、一つのシステムに複数言語を使う仮定を書いたが、 そんなケースはほとんどないとか言われたな。そういう考えのやつも多いのだろう。
どっかにフロントエンドもscalaに置き換えつつあるとか書いてあったな そのうちscalaフレームワーク公開してくるかもな。 >フロント部分が Scala/C はありえんけど。 CはともかくScalaはrubyと比べても良い言語だし、ありえないことは無い。
migrationで、mysqlでいう add column after hoge をやりたいのですが、afterに相当する機能がないっぽいです。クエリべたっと書けばできますが、スマートな方法はないでしょうか?
>>929 特定のDBMSに依存する処理は素直にSQL書くのがスマートだと思うよ。
add column afterがDBMSとして一般的な機能でRailsがサポートしていないなら
プラグインを作る価値はあると思うんだけど、MySQLだけとかだったら
やっぱり直接SQLを書いたほうが誰が見ても分かりやすい。
mysqlを理解してればの前提付きだな。 抽象化したほうが、DB変わった場合の環境でも手直しは少ないと思うけどな。
db変わるという前提付きだな。 損の方が多い。
DB変わるより言語変わる可能性の方が普通はるかに高いからね
934 :
nobodyさん :2009/04/16(木) 19:02:58 ID:RLOaA3va
質問なんですが、 /aaa/30000/bbb/ccc というURLにリクエストが来たとき、 30000というidを取得しつつ、 aaaコントローラのbbb_cccアクションが呼ばれるようにしたいのですが、そういったことは可能でしょうか??
Rails 2.1.1 で初めて Rails をやりはじめました。
「Rails によるアジャイル〜第二版」を読みながらやっているのですが、さっそくはまった。
1. rails depot
2. (DB作成)
3. nruby script/generate model product
4. rake db:migrate
5. ruby script/generate controller admin
ここまで実行し、本のP.62 の通り、admin_controller.rb において
class AdminController < ApplicationController
scaffold :product
end
と修正して、mongrel を立ち上げてブラウザで
http://localhost:3000/admin にアクセスしたのだけど、
NoMethodError in AdminController#index
と出る。products テーブルの CRUD 画面が出ないのですが、
どうしたらいいのでしょうか。
http://d.hatena.ne.jp/idesaku/20071211/1197386955 にあるように、以下のようにやらないといけないのですか?
ruby script/generate scaffold モデル名 テーブルにあるカラム
すでに 上記 3. と 4. で、空のモデルクラスとテーブルは出来ているので、
AdminController を直すだけには出来ないのでしょうか?
indexメソッドを追加すればいいじゃん
937 :
935 :2009/04/16(木) 19:57:36 ID:???
>>936 def index を追加し、app/views/admin/index.html.erb を作成すれば、
ブラウザでアクセスすれば、ページが表示されますが、それは CRUD 画面ではなく、
本の第4章の、Hello, Rails と同じですよね。
>>935 で示した hatena と同じように、別モデル(person)を
ruby script/generate scaffold person .....
としたら、自動生成された people_controller.rb には、結構な量のソースが生成されたのだけど、
Rails 2.0 からは、コントローラに scaffold と1行書けばよい、というやり方は廃止になった、ということ?
その本の第4章は知らんがな。。。 Railsは変化が激しいから本と違うバージョンでやらない方がいいと思うよ。 1.2からはスキャフォールド生成の手順からして変わってる。
「1.2からは」じゃなくて「1.2とは」だ
不要なHTMLのタグ隠蔽する方法教えて ソースから見せたくないのだ
delキー押せばいいんじゃない
なんかここのところ、 質問してはその後まったくレスのないやつが多いな
質問の仕方や日本語の使い方から察するにかなり若い連中なんだろうと思ってる
945 :
935 :2009/04/17(金) 02:31:23 ID:???
>>940 レスどうもありがとうございます。
底や別のページを見て、Rails 1.2 系が持っていた scaffold 機能は 2.0 系でなくなったと理解しました。
scaffolding や ActiveScaffold を入れれば 2.0 でも1.2 系のことが出来るそうですが、
ややこしいので、ひとまず 別環境に Rails 1.2.6 を入れて、そっちで勉強することにしました。
もう一つグチ。「Rails によるアジャイル〜」の本で、(正確なページ数は忘れたが) P62 ページの後、
足りないカラム(price カラム)を足す演習がありますが、
Rails 1.2 系だと、rake db:migrate でカラム出すだけで、scaffold の画面をリロードするだけで
増えたカラムが画面に反映されるが、
Rails 2.0 で、
>>935 に書いた
$ ruby script/generate scaffold モデル名
を再度実行しても、そもそも Contoroller や views/admin 以下の *.html.erb に
CRUD を行う HTML がべた書きされてしまっているため、増えたカラムが反映されない。
結局テーブルをドロップして、scaffold をやり直した。
どうして Rails 2.0 系は scaffold を廃止したのだろう?
※
といいつつ、よほどイントラ向けでユーザもうるさくない場合以外は、
業務ではscaffold なままの web アプリは使わない、と同僚からツッコミがあった。
>>941 <% if false %>
見せたくない箇所
<% end %>
どうせ漏れる時は漏れる。埋め込み言語の宿命。
漏れても大丈夫。多い日でも安心。
RoRサイトも踏み台だな。
>>945 自分もRailsに慣れるとscaffoldは使わない事が多くなってくるので、
scaffoldに固執しないほうがいいと思う。
基本的な流れというか使い方を覚えたら、
最新版のRailsで何か作るほうがいいんじゃないかな。
当然、バージョンが違う事で詰まる部分があるんだけど
ググったり、このスレで聞いたりすればなんとかなる。
scaffoldって、コントローラに scaffold と書くと使えるようになるscaffoldと generateで作るやつがあるが、後者は2系でも普通にある。こっちはRESTful なリソースを公開しようとすると、なんだかんだ言って基本的な骨組みは scaffoldのものが使えたりする。
952 :
934 :2009/04/19(日) 20:26:48 ID:GcnrJHDf
>>934 分かる方いらっしゃましたらご教示頂けると幸いです><
>>952 map.connect ':controller/:id/bbb/ccc', :action => 'bbb_ccc'
書いてから思ったが、そういうのがaaa限定なら変にいろいろ受け付けるようにせず map.connect 'aaa/:id/bbb/ccc', :controller => 'aaa', :action => 'bbb_ccc' のほうがいいか。
955 :
952 :2009/04/20(月) 01:59:43 ID:PwSyAV4m
>>954 でいけました!ありがとうございましたm(_ _)m
質問です。 あるページにジャンプする際に、非ログイン状態だと403を返すようにしたいのですが、 これはどこにコードを記述するべきでしょうか?
コントローラだろjk restful authenticationつかってない?
958 :
nobodyさん :2009/04/24(金) 20:51:26 ID:/YVXcJLc
すいません質問させてください。 (User.find 133).friends(:all, :conditions => ["age = ?", 20]) こんな感じのことをしたいのですが、どうすればいいでしょうか。 (.friendsでは配列が返ってくる・・) なんかうまい書き方があったら教えていただけると幸いです><
User.find(133).friends.find_all_by_age(20)
多用するならnamed_scopeで見易く。 class Friend < AR::Base named_scope :of_age, lambda {|age| { :conditions => [ 'age = ?', age ] } } end User.find(1333).friends.of_age(20)
ActiveRecord で質問です。 :conditions に ハッシュを渡せば 各キーが AND で結合されますが、 product = Product.find(:all, :conditions => { :price => 1000, :kubun => [6, 7, 8]} ) select * from products where price = 1000 and kubun in (6, 7, 8) key > value とかはできまませんか? 以下のような(在庫数が 10 以上 20 以下)SQL を実行させる Ruby コードを書きたいです。 10..20 として between を使いたいところですが、画面側で 10以上 だけしか指定されない場合があるため、使えません。 select * from products where price = 1000 and kubun in (6, 7, 8) and zaiko > 10 and zaiko < 20
conditions = 'price = ? AND kubun in (?) AND zaiko > ?' args = [ 1000, [6,7,8, 10] ] if upper conditions += ' AND zaiko < ?' args << upper end find(:all, :conditions => [ conditions, *args ])
10まで中に入れてしまった。察っして。
レスどうもありがとうございます。 やはり :conditions にハッシュを渡す方法じゃなく、 :conditoins => 配列 のやり方 (配列の第一要素が SQL の文字列、第二要素以降がバインド変数のパラメータ) じゃないとできないですか。 その方法でやってみます。
あまりありがたみはないが :conditions => [ 'price = :p', { :p => 1000 } ] とも書けるな。
web側で入力項目が15コぐらいあり、それがセッションに入っている。 その15コがそのまま SQL のパラメータになるんだけど、session オブジェクトをそのまま ActiveRecord のモデルのメソッドに 渡してもよい? それとも何か Condition クラスを作り、そこに詰めてからモデルに渡すべき? Java 的発想だと、Http 層を 永続化層に持って行くのはよくないので、なんらかのオブジェクトに詰め直してから 渡しますが、Rails でもそうしたほうがいいでしょうか。 session はハッシュなので、そのハッシュから部分的なハッシュを作り直し、ハッシュ渡しにしようかと思いましたが、 入力項目が多いので、抜けがあると間違いの元なので、単独の Condition クラスを定義しようと思っています。
セッションがWeb上で取得したパラメータをそのまま持つよりは、 最初からConditionオブジェクトに詰めて永続化しておき、Sessionでは 参照キーだけを持っておくという形にする気がする。
そのまんま入れてます。 Railsでは詰めなおしてもあまり意味ないかも。 入力項目のチェックはActiveRecordがするんだし。
rspec-rrとか使っている人いない? 標準のrspecとmock、stubとどう違ってくるんでしょ
そのなんらかのオブジェクトがRailsでいうモデルだろ テーブルとモデルを1:1で紐づけるのがactive recordパターン テーブルとモデルをn:nで紐づけるのがdata mapperパターン Webはフォームの入力項目 ≒ テーブルなのでactive recordパターンが広く使われている なので、sessionでもつハッシュの構造はDBにあわせた方がベター それができない場合は、モデルにハッシュ構造の変換処理を書くのが作法 ARにもバリューオブジェクトあるけど、ちょっと用途が違う気がする
>>966 凝った検証処理が必要ないなら Hash#assert_valid_keys でチェックしてから Hash#slice で切り出して渡すかな。
お前ら rails でファイルアップロード用のファイル管理ライブラリとかプラグインてないんでしょうか? アップロードした画像をリサイズしてくれたり、ファイル一覧をサムネイルで表示してくれたり、 選んだの削除できたり そういうステキなのキボン
973 :
nobodyさん :2009/04/26(日) 14:44:10 ID:ZTlDJFDt
974 :
966 :2009/04/26(日) 18:58:31 ID:???
みなさまレスどうもありがとうございます。
結論としては、session オブジェクトをモデルのメソッドに渡すのをやめ、
新規に condition オブジェクトを作ることにしました。
>>970 今回のケースでは、
画面の入力項目はそのまま SQL のパラメータになるけど、モデル(テーブル)の属性にはならないのです。
>>961 (これも自分なのだが) のように、商品マスタの price が ○円以上○円以下で、kubun が■or■で・・・・といった条件が延々と並ぶ。
だからモデルクラスはそのまま使えませんでした。
>>971 ruby リファレンスマニュアルの hash をみたところ、assert_valid_keys や slice というメソッドはありませんでした。
これは自分で特異メソッドとして定義せよ、ということ?
976 :
nobodyさん :2009/04/27(月) 16:33:28 ID:ty2d5Btl
>>959 >>960 ありがとうございますm(_ _)m
すいません他にも質問したいことができました。
if true
User.friends
elseif
User.parents
else
User.childern
end
のような処理をしたいとき、
User.xxx のxxxの部分を変数みたいにして、条件分岐なしで一行で書くことはできないでしょうか??
ご教示いただけると幸いです。
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 を一行で書けないか・・みたいな感じです。
User.send(x)
> 977 User.method(x).call
すみません、知恵を貸してください。 現在、items(仮)というテーブル(id, name)からnameを条件にレコードを検索し、 will_paginateを使用して表示している機能があります。 その機能を、検索条件との「完全一致」「前方一致」「部分一致」の順に並び替えたいのですが、 なにかいい方法はないでしょうか…? 複雑なSQLを書けばいけるとは思いますが、何か他に方法がないか模索してします。
完全一致、前方一致、部分一致の3検索をする以上selectが3回必要なのは仕方ないんじゃないだろうか。 Item.find_by_sql <<SQL SELECT * FROM ( SELECT 1 AS sort_key, * FROM items WHERE name LIKE "aaa" UNION SELECT 2 AS sort_key, * FROM items WHERE name LIKE "a%" UNION SELECT 3 AS sort_key, * FROM items WHERE name LIKE "%a%") ORDER BY sort_key ASC SQL とか。(てきとう) トータルの該当検索件数が大したことないなら、 それぞれの一致方式で個別にfindした結果を連結し、そいつに、 will_paginateが必要とするメソッドを特異メソッドとして実装するという手もある。 (total_pages, current_page, previous_page, next_pageメソッドを定義すればいい) あと、likeの引数に任意の外部入力文字列を安全に埋め込むのは結構面倒だと思うのでがんばって。
>>981 そのままだとaaaというnameを持つitemが3つのselectそれぞれから出てくるな。
要distinct?
983 :
nobodyさん :2009/04/28(火) 06:13:49 ID:N2IsGKnP
スレ終了まぎわですが、おしえてください。 ユーザ毎にカード型データベースを持たせたいと思っています。 自由にフィールド数を定義でき、入力フィールドも並び替えできるようにしたいと 思ってます(イメージ的には簡易的なデヂエみたいなの) そこで質問ですが、ユーザ操作でtableを生成することはrails的作法で有りなのでしょうか? ある程度入力値にルールを設けたいので、validateほにゃららを定義できれば..と 欲張っているんですが、modelに手をいれる必要がありますよね? generatorとして作らないといけないのでしょうか?
>>980 1.ページごとのレコードをDBで絞り込んでRailsで表示させる
2.該当のレコードをすべて取得してRailsで表示させる
のどちらかだと思う
「1」はDB依存だからどのDBを使ってるかで答えは変わる
「2」は大量のレコードが返ってくるなら普通やらない
そもそも部分一致はインデックスを使えないから、
普通のRDBの使い方ではやるべきじゃないな。
全文検索機能を使ってるなら、また答えは変わる。
情報が不足しすぎて答えられないな
>>983 ユーザーのアカウントごとに構造の異なるARモデルを扱うアプリを運用しています。
テーブルスキーマ自体はいまのところユーザーの好き勝手ではなく、アカウント作成時に
カラムの型やオプションをYAMLファイルで定義したものを使っているので
>>983 ほど柔軟ではないです。
AR::Base.connection.create_table {|t| ... } でそれらのカラム定義から t.column を呼び、
Class.new(AR::Base) して動的に作ったモデルクラスで set_table_nameすれば、ファイル
に書き出さずともモデルとして使用できます。
カラムの数や順序を自由に変更できるようにするには、ユーザーの変更操作に同期して
schema_statements.rbにあるメソッドを呼んで処理してやる必要があると思います。
986 :
nobodyさん :2009/04/29(水) 01:18:41 ID:MR+/ICUP
相当失敗した話を聞いてるが、まだオフショアとか言ってるところあるのか。 しかもこれからってw 圧力釜もろくに作れない国に発注するって顧客に対する背信行為だと思う。 メーカーなみに製造管理するならいいけど、 工場ほど単純作業じゃないから無理だわな。
日本の技術者=マトモ、は既に幻想だろうに。きっちり技術階層ができてるし、新人はゆとってるし。 で、コストの高い日本の不勉強さん使うよりオフショアの方が質がいい。そんな感じだろーね。 けど、実際は難しいけど。上手くいかせたくない心理が働いてそう。
うまくいかせたくない心理なんて働かねーよ。顧客の窓口は日本だぞ。 失敗すれば全部かぶるんだよ。幻想はおまえだ
RubyConf Chinaみたいなのもやるようだし、中国でもRuby熱は高まって きてるのかね。 個人的には、中国とかインドの新興国はJavaばっかりやってるイメージ があるが。
991 :
980 :2009/04/29(水) 11:25:21 ID:???
>>981-982 ,984
回答ありがとうございました。
>>981 さんの方法が、自分でもわかりやすいかなという感じです。
>>982 まったくそのとおりで、要distinctです。
重複を省くための条件が長くなってしまうので、この方法でやるか悩んでいます。
>>984 実際には食品をDB(mysql5)から検索するシステムです。
DBに「牛乳」「牛乳(低脂肪)」「牛乳(濃厚)」「加工牛乳」というレコードがあった場合、
「牛乳」という検索ワードで上記4レコードは表示する必要があります。
なので、
select * from items where name like '%検索文字列%'
でも必要な情報は取れるのですが、完全一致したものは上に表示したいという
気持ちもあります。
ていうかlikeの部分一致ってINDEX使わないんですね・・・。
オフショア≒カスがコスト改善したつもりになって社内で評価されるためのまやかしw
>>991 なるほど。likeの部分一致の遅さを許容できるならやり方はあるよ。
3回SQLを打つのは速度や負荷を考えるとやらない方がいいと思う。
すでに話題になってるように重複の問題もあるし。
やり方の一つとしては「ソートキーを作る」。
MySQLはほとんどやらないし、いま手元に環境はないから検証できないのだが、
case文はサポートされていたと思う。
select column_1, columnt_2, column_3,
case
when name = '牛乳' then 0
else 1
end match
from items
where name like '%牛乳%'
order by match, sort_key
などとやれば完全一致したものは「match」列に「0」が、そうでないものは「1」が返るはず。
これを第1ソートキーにすればいい。
部分一致や後方一致もちょっと調べたところ、
文字列比較関数なるものをを使えばできるんじゃないだろうか。
優先させたい条件順に番号をふればきれいに並ぶと思う。
これはSQLネタのように思うので、
これ以上知りたければSQLスレがいいだろう。
あるのか知らないけど。
あともし解決したら、差し支えない範囲で解決策をレスしてほしい。
ほかの人が参考にできるから。
聞いてわかってさよならが多くなってるからね。
>>993 ありがとうございます。
なるほど・・・。その方法はいいですね。
>あともし解決したら、差し支えない範囲で解決策をレスしてほしい。
了解です。該当機能が動くようになった時にでも。
995 :
981 :2009/04/29(水) 23:40:19 ID:???
>>981 『「完全一致」「前方一致」「部分一致」でソート』が動くようになりましたので、早速ご報告を。
結論から言えば、sqlで解決しました。以下バージョン等・・・
Rails2.3.2
will_paginateは確か2.2.2か2.0.2だったような・・・。今日現在の「最新」です。
dbはmysql5.0.67
なおwill_paginateの文献をググると、paginate_by_sqlメソッドを自前で追加する
tipが良く見つかりましたが、最新ではソース追加なしでpaginate_by_sqlが使えました。
■牛乳の例でのsql分
select
*,
(
case
when name = '牛乳' then 0
else
case
when name like '牛乳%' then 1
else 2
end
end
) as sort_key
from
items
where
name like '%牛乳%'
996 :
981続き :2009/04/29(水) 23:45:05 ID:???
部分一致のsqlは遅いかもしれませんが、データ自体は4000件程度で増えることは
ほとんどないので、コレで意向と思います。
ソースは変えてありますが、下のような感じで対応しました。
#コントローラ
def コントローラのメソッド
search = params[:search] #検索画面から検索文字列を取得
sql = "select *,(case when name = \'#{search}\' then 0 else case when name like '\'#{search}\'%' then 1 else 2 end end) as sort_key from items where name like \'%#{search}\'%
@results = Item.paginate_by_sql(sql, :page => params[:page], :per_page => 30)
end
#ビュー
<% @results.each{|item| %>
<%= item.name %><br>
<% end %>
>>981 ,982,984,993
答えてくださった方、ありがとうございました。
997 :
981続き :2009/04/29(水) 23:53:52 ID:???
うう・・・ 動いてるソースから書き換えたのでいろいろ間違えてます・・・>< order byがないと修正した意味ないっス〜・・・。そのあたりは流れから脳内変換してください>< すみません、スレ汚し失礼しました。
>>995 フィードバックありがとう。強要してすまんね。
paginate_by_sqlは知らなかったから参考になった。
1000ならrubyの指輪を唄いたくなる
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。