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

【Ruby】Ruby on Rails Part6

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん2008/10/24(金) 17:46:53ID:???
■前 Ruby on Rails のスレ が
http://pc11.2ch.net/test/read.cgi/php/1207425569/

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

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

■参考スレ
Rubyについて Part 33
http://pc11.2ch.net/test/read.cgi/tech/1223709050/
Ruby 初心者スレッド Part 22
http://pc11.2ch.net/test/read.cgi/tech/1221467121/
0713nobodyさん2009/03/22(日) 11:43:11ID:???
Merbとの統合という大手術になるから、その頃安定して使えるとは思えんな。
5月のRailsConfでβという希望的観測だったかな。

正直な話、新規プロジェクトでない限りあえて最新を追いかける必要もないんじゃ。
0714nobodyさん2009/03/22(日) 13:32:32ID:???
提案に行って、最終2社あたりまで残って、
競合の事を聞いたら向こうもRailsだったみたいなことが出てきた。
結構みなさんがんばっているんだな。
0715nobodyさん2009/03/22(日) 13:50:19ID:???
Rails本体はともかくプラグインが3に対応するのに時間がかかりそう。安定するのは年末ぐらいかな
0716nobodyさん2009/03/22(日) 14:33:05ID:???
3 が安定する前に、大掛かりな修正を加えた 3 の軌道修正をするための 3.1, 3.2 を追いかけないといけないだろうな。
0717nobodyさん2009/03/22(日) 20:12:44ID:???
手元で最新版の機能を使えるのに、運用で使えないのはストレス堪ると思うが。

値段ではJavaの案件は高額だしな。RoRのほうが残るだろう。
0718nobodyさん2009/03/23(月) 00:41:13ID:???
最新の機能ってそんなに需要あるのかな?
それよりメモリ食いを押さえる方が喜ぶ人は多いと思うんだ

機能が肥大化して習熟コストが高くなるのも歓迎されないと思う
0719nobodyさん2009/03/23(月) 04:41:04ID:???
>>717
言語指定されてる時点で、下っ端なのが分かるな。
0720nobodyさん2009/03/23(月) 04:59:55ID:???
>>718
開発効率が上がるような機能であれば歓迎するけどね。
2.1から使えるようになったnamed_scopeはかなり重宝してる。
0721nobodyさん2009/03/23(月) 19:32:08ID:???
今から始めるなら2.2でいいの?
0722nobodyさん2009/03/23(月) 20:17:29ID:???
まあ2.2か2.3じゃね
どっちにしろ日本語リソースのみでは勉強にならないけどね
0723nobodyさん2009/03/23(月) 20:34:54ID:???
日本語リソースってなんじゃ?
0724nobodyさん2009/03/23(月) 21:14:00ID:???
ここでのリソースは参考資料・情報源といった意味でしょうな。



0725nobodyさん2009/03/23(月) 21:55:47ID:???
今さら2.2はないだろ常考。
Rack対応やらi18nやら重要なアップデートが多いので、これを使わない手はない。

そしてRuby1.9.1にRails2.3.2。これ最強。
しかし日本語の資料がほとんどないという諸刃の剣。素人にはお薦めできない。
0726nobodyさん2009/03/23(月) 21:59:07ID:???
Ruby1.9って開発版だろ。
0727nobodyさん2009/03/23(月) 22:24:53ID:???
はあ?
0728nobodyさん2009/03/23(月) 22:29:25ID:???
>>726
1.9.1は安定版
0729nobodyさん2009/03/23(月) 22:35:45ID:???
使ってるライブラリが1.9.1対応するまでは1.8.7つかっとけ。

hpricotとrspecが対応したから個人的にはそろそろ移行のタイミング。
0730nobodyさん2009/03/23(月) 22:48:10ID:???
今からやる初心者に2.3勧めない方がいいんじゃないかな
0731nobodyさん2009/03/23(月) 23:48:39ID:???
本がないから?
0732nobodyさん2009/03/24(火) 01:30:01ID:???
>>724
それはソースじゃなくて?
0733nobodyさん2009/03/24(火) 03:41:22ID:???
1.9.xは互換性無いからな。
普通は偶数のほうが安定板。1.9.2を待つのが正しい。
0734nobodyさん2009/03/24(火) 08:47:33ID:???
>>732
リソースであってる。
>>733
そんなコンベンションはとっくになくなっている。
0735nobodyさん2009/03/24(火) 10:05:09ID:???
そんなに急がないなら5月に出るRails 3.xから追いかけたほうがいいかも
0736nobodyさん2009/03/24(火) 11:03:13ID:???
きりがないからおれはもう追いかけてる
0737nobodyさん2009/03/24(火) 13:17:24ID:???
下痢した
0738nobodyさん2009/03/24(火) 23:49:43ID:???
常に片思いも辛いな。がんがれ。
0739nobodyさん2009/03/26(木) 09:15:38ID:???
きもちわるい…
http://www.atmarkit.co.jp/news/200712/25/ruby01.jpg
0740nobodyさん2009/03/26(木) 20:24:41ID:gX082xc4
そうか?普通のおっさんだと思うがなー
でもDHHはガチのイケメン
0741nobodyさん2009/03/26(木) 23:44:57ID:???
アニメと漫画しか見たことがないんだろ
0742nobodyさん2009/03/26(木) 23:55:23ID:???
kokomomousuguitendesune
0743nobodyさん2009/03/27(金) 09:30:58ID:???
>>741
いや、そりゃお前は毎日鏡で見慣れてるからいいだろうけど
0744nobodyさん2009/03/27(金) 09:48:00ID:???
脳みそないよりは、はるかにいいけどな
0745nobodyさん2009/03/27(金) 10:28:27ID:???
そんな書き込みに食いつくなよ恥ずかしい。
0746nobodyさん2009/03/27(金) 15:31:41ID:???
簡単なブログを作りました。
自分一人が使うなら一覧、新規作成や編集はこんな感じで済みます。

http://localhost:3000/
http://localhost:3000/new
http://localhost:3000/edit

これを複数人で使いたいと思ってます。
ユーザに tanaka, yamada がいた場合は次のようにしたいです。

http://localhost:3000/tanaka/
http://localhost:3000/tanaka/new/
http://localhost:3000/tanaka/edit/
http://localhost:3000/yamada/
http://localhost:3000/yamada/new/
http://localhost:3000/yamada/edit/

DB も分けたいので config/database.yml も

if 山田なら
 production:
  :
elif 田中なら
 production:
  :
end

としたいのですが、どうすればいいでしょうか。
config/routes.rb を何とかするのだとは思うのですが…。
0747nobodyさん2009/03/27(金) 15:45:06ID:???
すごい構成を考えるな。
複数ユーザーで使うなら「users」テーブルを作るんじゃダメなのか?
0748nobodyさん2009/03/27(金) 15:56:52ID:???
ですね。DB はシンプルにやってみます。

山田、田中的には URL を
はてなダイアリーのようにしたいそうで、
これだけは譲れないそうです。

この URL の実現方法分かりませんか。
0749nobodyさん2009/03/27(金) 15:58:46ID:???
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=>'コントローラー名'

って感じになるかの?
0750nobodyさん2009/03/27(金) 16:03:14ID:???
なんで下なんだ
0751nobodyさん2009/03/27(金) 16:09:51ID:???
> 1 人 1 DB

数人しか使わないし、
各テーブルの select や書き込み時に
user_name の条件を書くの面倒だなーと思いましたが、
佐藤&鈴木と相談し、正攻法で 1 DB にしてみます。

> map.connect ':user_name/:action' ,:controller=>'コントローラー名'

なるほどー。佐々木&森田と調べてみます。

ありがとうございましたー。
0752nobodyさん2009/03/27(金) 16:26:31ID:???
上から順に評価されて、マッチした所に行くから。

map.connect ':controller/:action/:id'
の上に書くと、

他のコントローラーに送りたくても
map.connect ':user_name/:action' ,:controller=>'コントローラー名'
の方が有効になる


どうしても上に書きたいなら
map.connect ':user_name/:action' ,:controller=>'コントローラー名' , :user_name=>/tanaka|yamada/
と限定させれば有効になるけど。

ユーザ増える度にroutes.rb追加するのはダリィ
0753nobodyさん2009/03/27(金) 16:36:46ID:???
usersテーブルのidカラムを文字列にしちゃえよ
やったことないから実はめんどいのかもしれんが
0754nobodyさん2009/03/27(金) 17:06:22ID:???
1人1DBにする必要が全く無いな。
07557512009/03/27(金) 17:36:57ID:???
>>752
下に書くのでバッチリでした。堀江&三木谷も喜んでます。

>>753
select & update の時に自動で user_name の縛りを入れてくれる仕組みがあるといいんですけどねー。忘れるとエラいことに。
0756nobodyさん2009/03/27(金) 20:12:28ID:1ySFVXM2
質問させてください。

script/console で User.all ようにしてDBのレコードの配列を取得したのですが、このあと同じカラム、例えばidカラムのレコードだけ抽出した場合はどう書けばよいでしょうか??
ご教示いただきたくm(_ _)m
0757nobodyさん2009/03/27(金) 22:11:30ID:???
>>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') したいのか
07587562009/03/27(金) 22:18:50ID:1ySFVXM2
レスありがとうございます。

>User.find(:all, :select => 'id')
これです。

User.all... のような書き方で同じことはできないのでしょうか??
0759nobodyさん2009/03/27(金) 22:55:31ID:???
バージョン管理でgit使ってる人いる?
よほど巨大なプロジェクトでも無い限り、メリットなさそうなイメージなんだけど…
0760nobodyさん2009/03/28(土) 00:54:57ID:???
githubからzipやtarで落とすなんて耐えられないから使ってる
0761nobodyさん2009/03/28(土) 03:23:43ID:???
ユーザいっぱいだと、グーグルクローラが来ただけで氏にそうだなwww
あとユーザ名の所のURLとかから攻略できそう。
0762nobodyさん2009/03/28(土) 03:58:33ID:???
>>758
def all(*args)
find(:all, *args)
end
なので(定義はAR/lib/active_record/base.rb)
User.all(:select => 'id')
と出来るね。
0763nobodyさん2009/03/28(土) 06:52:47ID:fhVnMpn3
>>760
ローカルでコミットできるのでそれだけでも超便利
あとgithub最強
0764nobodyさん2009/03/28(土) 11:33:05ID:???
何言ってるんですか
gitはgithubの専用クライアントですよ
0765nobodyさん2009/03/28(土) 21:33:38ID:???
Rails+PostgreSQL8.3で始めてみました。

フォームのテキストボックスで何も入力しないで更新すると、
DBにNULLじゃなくて空文字列が入ってくるんですが、
これは設定でNULLにできないんでしょうか。

コントローラーで変換してもできると思うんですが、
毎回同じ修正をするのはバグがでそうなので。
0766nobodyさん2009/03/28(土) 21:57:39ID:???
>>765
そこはモデルで指定だろ。
0767nobodyさん2009/03/28(土) 22:06:48ID:???
例外なく空文字列が入ってきたらNULL(nil)に変換したいので、
ApplicationControllerに定義すればできるかなと。
モデルならなおいいんですが、すべてのカラムで毎回指定するのはちょっと。。。

でも、考えてみたら数値型や日付型に空文字列が入ってきたらNULLになるので、
どこかにモデルの設定があるのかなと思いました。探してみます。
0768nobodyさん2009/03/29(日) 02:28:12ID:???
Web系やってるやつなんて、nullと空文字の区別なんてほとんどしてないよ
区別があるってことすら知らないやつも結構いると思う
0769nobodyさん2009/03/29(日) 02:45:12ID:???
そんなわけないだろw
0770nobodyさん2009/03/29(日) 03:57:30ID:???
>>759
他の連中をgitに移行させようとするのが面倒なので
とりあえず自分だけ git-svn 使って我慢してる
0771nobodyさん2009/03/29(日) 05:33:23ID:SRpsbxpf
Web系やってるやつなんて、nullと空文字の区別なんてほとんどしてないよ
区別があるってことすら知らないやつも結構いると思う
0772nobodyさん2009/03/29(日) 06:00:30ID:???
phpレベルだしな。DBAの常識はコボラー並みに通用しない。
0773nobodyさん2009/03/29(日) 10:04:29ID:7sf+X/id
WEBアプリはNULLを扱うより空白を使った方が色々と使い勝手がいいよ
内容の空チェックには「hoge.blank?」を使えばおk
0774nobodyさん2009/03/29(日) 10:39:06ID:???
色々の具体的な例ってどんなだ?

blank?を使うのは、データをRailsで取得したあとだろ。
取得したくない場合は、「is not null」とか条件をつけたりするが、
NULLと空白を意識してないのに、両方混在するときついんだが。
「論理的には同じ意味でーす」みたいな感じだから条件が増えてばかにならん。

それにユニーク制約とかどうするのよ。
NULL許可でも空文字で入ってきたらはじかれるじゃん。

でもそんなことを意識してるWebプログラマーは少数派。
0775nobodyさん2009/03/29(日) 10:44:52ID:???
>>774
仕事でWebやっているけど、
そんな連中には会ったことないぞ。
プログラム未経験の新卒くらいじゃないのか?
07767752009/03/29(日) 10:46:50ID:???
ん、なんか書き方おかしいな。
NULLと空白の違いを意識しないやつには会ったことないって意味ね。
しかし、本当にそんな変なやついるのかな。
素人以外で。
0777nobodyさん2009/03/29(日) 10:53:35ID:???
>>776
そういうレベルの人間がいるような環境で仕事してるんだろ。
0778nobodyさん2009/03/29(日) 13:38:45ID:???
俺もnullと空文字列を同じものだなんて捉えてる奴は見たこと無いな
大学になら居たかも知れん
0779nobodyさん2009/03/29(日) 14:08:29ID:???
PHPだとどっちもfalseだからね。
PHPしか知らないエンジニアなら、区別がつかんかもしれん。
0780nobodyさん2009/03/29(日) 14:33:09ID:???
じゃあPerlしか知らないエンジニアは 0 と "" と undef の区別がつかないんだね
0781nobodyさん2009/03/29(日) 14:38:02ID:???
区別してるって言ってるやつは、DBにどっち入れてるの?
0782nobodyさん2009/03/29(日) 14:39:19ID:???
NULLの伝搬はいやらしいから、可能なものはNOT NULLがいいなぁ。
0783nobodyさん2009/03/29(日) 14:41:57ID:???
×伝搬(でんぱん)
○伝播(でんぱ)
0784nobodyさん2009/03/29(日) 14:45:44ID:???
NULLの伝播って意味わからん。
伝播ということはどこかをNULLにするとほかに波及するってことか?
0785nobodyさん2009/03/29(日) 14:47:11ID:???
Rubyにはnilがあるじゃんよ
0786nobodyさん2009/03/29(日) 15:02:00ID:???
migrationファイルで、

t.string hoge :null => false
t.string hage :default => nil

みたいに、nullとnilの表現が混在して、一瞬どっちがどっちだったか
まぎらわしくなることがある。
0787nobodyさん2009/03/29(日) 17:58:33ID: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 系に対応している本がいいのですが、(そうでなくても)いい本があれば教えてください。
0788nobodyさん2009/03/29(日) 18:23:57ID:???
>>787
http://www.pragprog.com/titles/rails3/agile-web-development-with-rails-third-edition
その本の原書第3版が出たばかりで、これは当然2系を扱っている。
(URLのrails3てのはrails ver3じゃなくて、この本の第3版という意味)

英語が気にならないならどうぞ。

0789nobodyさん2009/03/29(日) 18:24:36ID:???
対応してなくても、初心者にとってそれ以上の本は今のところない。
2系の追加機能については最後のほうでちょこっと触れてたはず
なので、補完しながら読めば問題ない。
0790nobodyさん2009/03/29(日) 18:36:08ID:???
一から作るのか既存のシステムのメンテか、
教えてもらえる人がいるのかいないのかで違ってくるんじゃないだろうか。
どっちにしてもリファレンス本は別に1冊あった方がいいよ。

リファレンスなら、

Railsレシピブック(ソフトバンク) ←ものすごく無難な感じ
The Rails Way(翔泳社) ←少しがっつりやりたい人向け。RSpecを使うならこれ
Ruby on Rails 逆引きクイックリファレンス(毎コミュ) ←割と実戦的

があるね。一応どれも2.0に対応してるよ。
07917872009/03/29(日) 18:53:47ID:Uytn6itq
レスどうもありがとうございます。
いま amazon を必死に眺めてますが、
「10日でおぼえる Ruby on Rails入門教室」が気になってきました。
あと少ししたら本屋に行ってこようと思います。

>>790
新規システム開発で、プロジェクトそのものは製造フェーズに入り始めたところらしい。
人が足りない&デスマになってきたのでアサインされたそうです。

まだ中身を見ていないのですが、
> Ruby on Rails 逆引きクイックリファレンス(毎コミュ) ←割と実戦的

これは逆引きとのことですが、これを使って勉強するのは、ちょっと目的が違いますか?
0792nobodyさん2009/03/29(日) 19:56:48ID:???
前提知識がないところに参加ってのは、ブルックスの法則を実体験する羽目に
なるおそれがあるから、基本から予習しておいたほうがいいな。
07937582009/03/29(日) 20:02:37ID:P4wqMwA6?2BP(0)
>>762
おお!ありがとうございます!
0794nobodyさん2009/03/29(日) 20:30:33ID:???
>>779
それはあいまいチェックの場合だろ===でやれば通らない
0795nobodyさん2009/03/29(日) 21:31:31ID:???
>>791
製造フェーズに入り始めなのにデスマになりかけとはご愁傷様

リファレンスは部分部分を解説してるから、
全体が分からないときついと思うよ。
逆引き〜はいい本だと個人的には思うけど、それだけで勉強するのは無理だと思う。


「10日でおぼえる Ruby on Rails入門教室」は、
徹底してテスト駆動開発のスタンスをとってて、
Railsでの開発の基礎固めにはいいと思うよ。
デスマだとテスト駆動とか無視される可能性大だけど。

ちょっとだけどRubyの基礎みたいなものも触れてるから、
買うならはじめはそれ1冊をやるといいかもね。

欠点は

・1.2系が対象。2系との差は意外と無視できない。
違いを知らないとスキャフォールドの生成すら苦労する。

・目次が不親切。リファレンスとしては使えない
「あれやるのってどこに書いてあったっけ?」と思って後から探しても見つからない。

・広範囲にやりすぎて、まとまりがない
7,9,10日目はいらないと思う。「ゲームアプリの作成」とかいらんちゅーの。
その代わりActiveRecordとかについて、もっと突っ込んだりしてほしかった。


Rubyそのものの入門書はオライリーの「はじめてのRuby」がダントツおすすめ。
多言語の経験ある人むけだけど、Javaメインで結構あるみたいだから。
0796nobodyさん2009/03/29(日) 22:23:24ID:???
電波の伝播
0797nobodyさん2009/03/29(日) 23:24:14ID:???
ここのスレの住人に聞いてもあまりいいものは得られないぞ
本気でRailsやってるやつは少ないと思う。過去のレス見てみ
ほとんどは趣味レベル
0798nobodyさん2009/03/30(月) 04:15:36ID:???
rubyでデスマってる時点で危険だよな。どんだけ低レベルなのかと。
あとRoRなんて採用しちゃって運用も大変だと思う。

ゲームは販促上は重要。実践的ではないにしろ。
0799nobodyさん2009/03/30(月) 08:53:57ID:???
RailsやRubyだからとか、言い訳するのは確かにレベル低いね。
0800nobodyさん2009/03/30(月) 11:17:58ID:???
>>799
じゃあ全部Cでやればいいじゃん

Cでなんてありえねーよ、と思ったのなら、それは道具の必要性の傍証
08017872009/03/30(月) 14:13:17ID:???
>>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 が覚えられればと思って、大変そうだけどがんばろうと思っています。
0802nobodyさん2009/03/30(月) 15:50:15ID:bIKocM1V
>>774
ちょっと勘違いしてないか?
テキストエリアの値が空文字でDBに保存さてれるのは、未入力の場合該当パラメータが空文字で送られてきてるから
該当カラムの値をnilにして保存すればDBにはNULLが格納される
なぜ未入力が空文字で送られてくるのかというと、そのほうが色々都合がいいから

・nilを許可する場合、メソッド実行前にnilチェックが必要になる
・空で更新されたのか、本当にNULLなのか見分けがつかない
・IS NULL検索時にインデックスがきかないケースが存在する
・NULLの扱いがDBの実装によって異なる

俺からしたら空白で統一されているものを、なぜわざわざ
コアをいじってまでNULLを混入させようとするのか謎なんだが
ユニーク+NULL許可というレアなケースを実現したいならなら、その場合だけ
フィルタ使ってnilに置き換えたらいいんじゃない?
0803nobodyさん2009/03/30(月) 16:39:00ID:???
・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まわりの扱いがおおらかすぎ。データが汚いと余計な苦労が増える。
0804nobodyさん2009/03/30(月) 16:40:11ID:???
形だけNULLにするとインデックスがきくことによって逆に遅くなったりする。

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

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

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

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

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

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


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

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

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

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

モデル(全部、完全コピペ)
class Product < ActiveRecord::Base
def self.salable_items
find(:all, :order => "date_available desc")
end
end
0812nobodyさん2009/03/31(火) 02:23:02ID:???
脱線だけど、2.1ならnamed_scopeで書くことも出来るね。
■ このスレッドは過去ログ倉庫に格納されています