【Ruby】Ruby on Rails Part7
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
2009/04/30(木) 23:07:27ID:???http://pc11.2ch.net/test/read.cgi/php/1224838013/
■参考サイト
<英語>
本家:http://www.rubyonrails.org
API document:http://api.rubyonrails.com/
開発者のblog:http://weblog.rubyonrails.org/
参考wiki:http://wiki.rubyonrails.org/rails
<日本語>
Rails' wiki: http://wiki.fdiary.net/rails/
■参考スレ(プログラム板)
Rubyについて Part 35
http://pc12.2ch.net/test/read.cgi/tech/1238194350/
Ruby 初心者スレッド Part 27
http://pc12.2ch.net/test/read.cgi/tech/1238632943/l50
0035nobodyさん
2009/05/03(日) 23:13:01ID:???0036nobodyさん
2009/05/03(日) 23:30:06ID:???0037nobodyさん
2009/05/04(月) 00:47:10ID:???できるような設計にしようと思ってるんだけど、rails的にどうなの?
一般利用者はほとんどのテーブルに対して参照ばっかりだから、
それぞれのコントローラのupdateやdelete、insertを発行するメソッドは
管理者のみ、っていう方法もあるんだけど、どうしたらいいんかな〜。
0038nobodyさん
2009/05/04(月) 02:55:49ID:???admin/userとか階層作って管理する方法を自分は採用してる。
004038
2009/05/04(月) 10:34:22ID:MqCVRAIXAdmin::UserControllerを 作ってlistやdeleteアクションを定義する感じ。
0041nobodyさん
2009/05/04(月) 22:11:00ID:???ありがとう。37です。
あんま想像つかないけど、そんな方法があるのか。
結局自分は、コントローラとモデルとテーブルを1:1:1になるよう用意することにして、
(コントローラは増えることもあるけど)
各コントローラの参照系以外のメソッドに管理者認証を求めるフィルタを設定した。
0042nobodyさん
2009/05/07(木) 15:29:56ID:6IKl0wLqカラムがid, user_id, name
のテーブルがあったとして、それのActiveRecord::Baseの継承クラスのインスタンス5つが配列aに格納されているとします。
この配列aの中に、user_idが5であるインスタンスがあった場合それを取り出し、なかった場合nilかfalseを返すような処理を書きたいのですが、どう書くのが一番スマートでしょうか??
ご教示頂けると幸いですm(_ _)m
0043nobodyさん
2009/05/07(木) 18:47:11ID:???まず、あなたなりに書いたらどうなるの?
その後教えてあげます。
0044nobodyさん
2009/05/07(木) 21:22:30ID:???既にふつうの(=ARのHasManyProxyなどでない)配列になっているっ
てことだよな?
Enumerable#find / detectでも好きに使えばいいじゃん。
004542
2009/05/08(金) 00:27:37ID:XobVG3nsありがとうございます!
findの使い方よくわかっていませんでした。。
0046nobodyさん
2009/05/09(土) 07:16:53ID:???コントローラはnamespace使って管理側とユーザ側で分けた方がよいね
script/generate controller admin::users
routes.rbもnamespace使える
map.namespace(:admin) do |admin|
admin.resources :users
end
0047nobodyさん
2009/05/09(土) 07:27:31ID:???0048nobodyさん
2009/05/10(日) 16:27:57ID:???なるほど・・・。
名前空間でコントローラを整理できることを知らなかった。
ありがとう!
一般ユーザと会員ユーザ、システム管理者からなるシステムを作っているのだけど、
作り直そうか迷うなぁ。
わけた方がすっきりするんだろうけど、一般ユーザと会員ユーザの出来ることは
ほとんど同じなんだよなぁ。
0049nobodyさん
2009/05/10(日) 16:38:53ID:???長く運用してると、機能追加などで次第に一般ユーザと会員ユーザの違いが
大きくなっていくので、そのときに整理し直してもいいと思う。
0050nobodyさん
2009/05/10(日) 22:14:49ID:???システムごと分離するか、コントローラを分割するか、ユーザのrole機能で対応するかは適材適所やね
0051nobodyさん
2009/05/11(月) 00:35:14ID:???0053nobodyさん
2009/05/11(月) 23:14:24ID:2slawtRURails 2.1.1 / rspec 1.1.12 / rspec-rails 1.1.12
spec ファイルにおいて、 fixture のデータがロードされたり消されたりする
タイミングがわかりません。
hoges テーブルに対する Hoge というモデルの spec ファイルを作っていて、
以下のようになっています。
describe "○ができること...01"
fixtures :hoge
it "A..." do
end
end
describe "○ができること...02"
fixtures :hoge_for_some_cases
it "B..." do
end
it "C..." do
end
end
describe "○ができること...03"
fixtures :hoge
it "D..." do
end
end
005453
2009/05/11(月) 23:16:54ID:???describe "○ができること...02" が走って
fixtures :hoge_for_some_cases がロードされた後、
describe "○ができること...03" の
it "D..." do が動くときに、
fixtures :hoge_for_some_cases で insert されたデータが残っているようです。
これは describe "○ができること...03" で期待する条件とは違うため、テストが失敗します。
○質問1:
fixture によるデータ投入は、spec が起動されるときに一度だけなのか?
fixtures という行を通過する度になるのでしょうか?
# fixtures という行を通過する度に、
# delete from foo と
# hoge.yml の中身の全件 insert が走る?
describe "○ができること...02" のブロックを消し、fixtures :hoge_for_some_cases が動かないようにするれば、
describe "○ができること...01" も
describe "○ができること...03" も動きます。
○質問2:
fixtures :hoge_for_some_cases の中身をfixtures :hoge に書いてしまえばいいのでしょうが、
データ件数が多いため、describe ごとに yml ファイルを分けたいのですが、これは rails 的ではないのでしょうか?
○質問3:
また、ひとつの describe が終わるごとにデータが truncate されるとうれしいのですが、それはどうすればいいのでしょうか?
(これも Rails 的ではない?)
○質問4:
ちなみに spec を実行後に DB の中身を覗くと、レコードが残っているので、これはそういうものみたいですね。
※fixture で投入されたデータのトランザクションと、
テストメソッドの中で model.save 等で保存されるトランザクションは違う?
0055鉄道教信者{鉄ヲタ(鉄道マニア)}
2009/05/12(火) 00:01:43ID:i2JJHx+d障害発生期間 :
2009 年 03 月 06 日
現象 :
1. 全サービスが使用できない。
原因 :
・モデムの電源ケーブルが外れていた。
現在 :
・モデムの電源ケーブルを挿し直しました。
hahahaha!
0056nobodyさん
2009/05/12(火) 20:34:40ID:???掃除のおばちゃんが掃除機のコンセントがないからと
勝手に電源ケーブル抜いてそのまま忘れて帰るんだよ
0057nobodyさん
2009/05/12(火) 20:35:25ID:???0058nobodyさん
2009/05/12(火) 20:36:18ID:8mXS3koFif x=='dog'
Dog.find :all
elsif x=='cat'
Cat.find :all
elsif x=='horse'
Horse.find :all
end
005958
2009/05/12(火) 20:37:09ID:8mXS3koF教えて頂けると幸いです。
0060nobodyさん
2009/05/12(火) 20:37:20ID:???代わりにfactory girlをどうぞ
0061nobodyさん
2009/05/12(火) 20:44:51ID:???単純に一行にするなら↓
if x == 'dog' then Dog.find :all elsif x == 'cat' then Cat.find:all else Horse.find :all end
モデルに多態性を持たせたいのならSTIかポリモルフィック関連を調べてちょ
0062nobodyさん
2009/05/12(火) 20:58:40ID:???x.classify.constantize.find :all
0063nobodyさん
2009/05/12(火) 21:02:44ID:???977 名前:nobodyさん[] 投稿日:2009/04/27(月) 20:17:33 ID:ty2d5Btl
すいません分かりにくかったかもしれないと思ったので書き直します・・
if x='friends'
User.friends
elseif x='pearents'
User.parents
else x='children'
User.childern
end
を一行で書けないか・・みたいな感じです。
978 名前:nobodyさん[sage] 投稿日:2009/04/27(月) 20:24:34 ID:???
User.send(x)
979 名前:nobodyさん[sage] 投稿日:2009/04/27(月) 20:26:28 ID:???
> 977
User.method(x).call
006458
2009/05/12(火) 21:04:34ID:8mXS3koF>>62
レスありがとうございますm(__)m
>classify.con...
うおぉぉ。。
rubyすごすぎる(笑)
0066nobodyさん
2009/05/12(火) 21:29:38ID:???x.classify.constantize.find(:all) if ["dog", "cat", "horse"].include?(x)
0068nobodyさん
2009/05/12(火) 21:43:04ID:???「使いたいから使う」みたいなのもたまに見かけるし
0069nobodyさん
2009/05/13(水) 05:15:55ID:???>ユーザのrole機能
そんな機能があったんかー、しらんかった。pluginかな?
ActiveRecord継承のRoleモデルつくってた。
まだ初めて半年だけど、もう以前の環境(php)には、戻れなウィッシュ。
0070nobodyさん
2009/05/13(水) 08:44:50ID:???確かにActiveRbacというプラグインもあるけど。
概念はRails Recipesにも載ってるね。
0071nobodyさん
2009/05/16(土) 18:32:34ID:???こちらのwebベースrailsコンソールのgeneratorプラグインを使ってみようとしているのですが、
eviltrout's kawaii at master - GitHub
http://github.com/eviltrout/kawaii/tree/master
通常のプラグインのインストールのように、
ruby script/plugin install git://github.com/eviltrout/kawaii.git
とするのではなく、ダウンロードしきて、lib/generatorsに放り込め、とあるのですが、
つまりこれは、lib/generators放り込むところが手動になってしまいます。
こういうのって、上記のようにインストールしただけでgeneratorに組み込めるようなプラグイン側の仕組みってないものでしょうか?
まあ、公式にも別途あるように、一度~/.rails/generatorsにいかに入れとけばいいという話もあるのでしょうが…
kawaii公式のインストール項目抜粋
> 1. Install the Kawaii generator
>
> If you want to generate Kawaii in multiple rails apps:
> Copy the kawaii directory to ~/.rails/generators
>
> To install for one rails app:
> Copy the kawaii directory to your application's lib/generators directory.
> (You might have to create lib/generators yourself.)
0072nobodyさん
2009/05/16(土) 18:47:23ID:???generatorとして認識される。
こいつがそういう配置になってないだけ。
0073nobodyさん
2009/05/16(土) 23:17:33ID:???上記はcategory ascでソートされますが、これをcategory descで
ソートされるようにするのにいい方法はありますでしょうか?
:order => 'category desc' とすれば一応できたのですが、これだと
テーブルのカラム名を直に入力してしまうので、これをやってしまっていいのか迷っています。
よろしくお願いします。
0074nobodyさん
2009/05/16(土) 23:28:15ID:???シンボルを書けるのは、単にSQLに埋め込むときにシンボルを #to_s した
ものが入るから。
0075nobodyさん
2009/05/16(土) 23:37:41ID:???通常あり得ないとは思うけど、カラム名が変わったときにシンボルで指定できると
修正が1カ所ですむけど、カラム名直書きしてしまうと、そのカラムが含まれる
すべての箇所を修正しないといけないから、何かスマートな方法あるかなと思っただけなんだ。
0076nobodyさん
2009/05/17(日) 00:00:07ID:???named_scope :by_category_asc, :order => 'category ASC'
named_scope :by_category_desc, :order => 'cateogry DESC'
end
としておくと、
Category.by_category_desc.find(:all, :conditions => '...')
などと書ける。
パラメータはマージされるので何度もSQLが走るということもない。
0077nobodyさん
2009/05/17(日) 00:11:22ID:???上の方法の方がスマートなので、そっちで書いてみます。
0078nobodyさん
2009/05/17(日) 00:18:09ID:???この意味が分からないのだが、
例えば「category」カラムの名前が「business_category」に変わったとしたら、
その1カ所をどういうふうに修正するの?
0079nobodyさん
2009/05/17(日) 00:35:24ID:???シンボリックリンクのように参照しているものだと妄想してました…。
0081nobodyさん
2009/05/17(日) 15:05:25ID:???なるほどやっぱりそうなんですね。
というか、railsのソース見てて思ったんですが
Rubygemsでも特定の配置にしたら、railsのgeneratorとして読み込んでくれるんですね。
利用者としてはこっちの方が簡単だ。
ちゃんと動くの確認したら、gems化の要望出しときます…。
0082nobodyさん
2009/05/17(日) 15:13:57ID:???何となくどんなの使ってるかしりたいんで皿島元々
plugin 'restful-authentication', :git => 'git://github.com/technoweenie/restful-authentication.git'
plugin 'forgot_password', :git => 'git://github.com/greenisus/forgot_password.git'
plugin 'role_requirement', :git => 'git://github.com/timcharper/role_requirement.git'
gem 'mislav-will_paginate', :lib => 'will_paginate', :source => 'http://gems.github.com'
gem 'rubyist-aasm', :lib => 'aasm', :source => 'http://gems.github.com'
gem "capistrano-ext", :lib => "capistrano"
rake("gems:install")
generate("authenticated", "--include-activation", "--aasm", "user", "session")
rake("db:migrate")
generate(:controller, 'welcome', 'index')
route "map.root :controller => 'welcome'"
run "rm public/index.html"
run "rm public/images/rails.png"
file ".gitignore", <<-CODE
.DS_Store
log/*.log
tmp/**/*
db/*.sqlite3
doc/api
doc/app
CODE
run "touch log/.gitignore"
run "touch tmp/.gitignore"
git :init
git :add => "."
git :commit => "-a -m 'Initial commit'"
0083nobodyさん
2009/05/17(日) 15:21:02ID:???なにやりたいかってbortぽいのをアプリケーションテンプレート使って作りたいんだけど素人は一からコツコツやれってことだろなぁ。
0084nobodyさん
2009/05/17(日) 17:37:58ID:???自分はまったく使ってないわ。
そんなに新規で作る事が少ないというのもあるけど、
一から設定するのもそれほど手間じゃないから。
今よく使うのはこんなもんかな。
mislav-will_paginate
jpmobile
postgres
rmagick
i18n_genrators
mongrel
mongrel_cluster
バージョン管理はSubversion。
そのうちgitも試してみたいと思う。
公開する時は、Passengerを使う事が多くなってきたけど、
スペックが低いサーバだとPassengerよりmongrelを複数起動して、
Apacheのproxy_balancerで動かすほうがレスポンス早いので、mongrelもしばらく使うつもり。
008582
2009/05/18(月) 00:04:25ID:???http://github.com/jeremymcanally/rails-templates/tree/master
>>84
確かにPassengerの初回起動は遅いもんなぁ。
mongrel使った事ないから試してみるよ!
0086nobodyさん
2009/05/18(月) 00:53:06ID:???mongrel 使ったことないということだけど、
普段(ローカルの開発環境) は webrick 使っていて、本番環境は Passenger を使っているの?
008782
2009/05/18(月) 01:22:25ID:???うん
開発webrickで本番Passenger。
monoで開発してた時も開発XSP本番mod_monoだったなぁ。
なんとなくapacheの方が安定してるのかなぁという思い込みでt
0088nobodyさん
2009/05/18(月) 01:24:25ID:???今ならThinかEbbじゃないの。
008986
2009/05/18(月) 02:32:23ID:???なるほど、どうもありがとう。
>>88
私はRailsはじめて2ヶ月弱なので、そういうのがわからないんです。
職場のプロジェクト環境が、ローカルの開発環境は mongrel で(gem install だけで入るし、Windows でも動くので)、
本番をどうしようかと話していてます(本番は passenger の予定)
Passenger が出てくる前は、雑誌やwebを読んでいて、
fastCGI、lighttpd、apache + mongrel_cluster という組み合わせがあったけど、
いまは本番運用ではどれが定番なんですか?(Linuxの場合)
Thin と Ebb というのは初めて知ったのでこれからググってくる。
0090nobodyさん
2009/05/18(月) 08:33:09ID:???ホスティングだからメモリの問題だとは思うけど。
0091nobodyさん
2009/05/19(火) 06:26:08ID:???今でもrailsは開発早いの?
それとも何か新しいのでた?
ほかの言語もrails並に早くなった?
0092nobodyさん
2009/05/19(火) 07:14:33ID:???0094nobodyさん
2009/05/19(火) 11:23:22ID:???0095nobodyさん
2009/05/19(火) 11:30:03ID:???rails3がでてmerbと統合したら、、
0096nobodyさん
2009/05/19(火) 11:55:09ID:???複数人でやると、こんな書き方があるのかーというばかり。
聞けば分かるけど、読んだだけではすぐには分からない書き方が多いような気もする。
0097nobodyさん
2009/05/19(火) 12:13:21ID:???動的にメソッド追加してて、どこに定義があるのかctagsで追えないとか。
でも勘とgrepでソース読めばなんとかなるレベルだとは思う。
ruby-debugがマシになってきて、railsの動的なコードの山もあまり怖くなくなってきた気がしなくもない。
0099nobodyさん
2009/05/19(火) 17:55:25ID:???規定を知らないだけで開発効率関係ないと思う
動的にメソッド入るならコメも入れてよって泣きながら探してる
0100nobodyさん
2009/05/19(火) 22:26:10ID:???rubyを書けること?
MVCを理解すること?
railsの統合開発環境をインストールして、どっかの本を見ながらいじればいいの?
0101nobodyさん
2009/05/19(火) 22:34:10ID:???0102nobodyさん
2009/05/19(火) 22:38:35ID:???プログラム初心者だと大変かもしれない。
Ruby初心者でも他の言語の経験があれば大丈夫かな。
Rubyが理解できる事が必須だけど、Railsと一緒に覚えていけばいい。
まずは環境のインストール方法が分かりやすく載っている本を買って
そのとおり進めていくほうが迷わないのでおすすめ。
本が扱っているバージョンはちょっと古いけど、そのバージョンに自分の環境を合わせる事が大切。
うっかり最新版を入れてしまうと、Railsの仕様が変わっているために迷子になってしまう。
0103nobodyさん
2009/05/19(火) 22:39:09ID:???0104nobodyさん
2009/05/19(火) 22:57:59ID:???例えばPHPならデータベースへの接続がしやすいとか、
なんとなーくこういうのに向いてるよっていう指標は無いの?
と、全くrubyを知らない俺が聞いてみる。
0105nobodyさん
2009/05/19(火) 23:18:46ID:???好みの問題という気がする。
0106nobodyさん
2009/05/20(水) 02:04:50ID:???Railsでは使えないの?
それとも使えるrailsのgemがあるの?
0107nobodyさん
2009/05/20(水) 02:19:51ID:???いうことなので、ふつうは言語不問。
ボディの内容を解釈できるかは足回り(XMLとかJSONとかなら
パーサが要るわけで)次第。
0108nobodyさん
2009/05/20(水) 02:53:06ID:???普通のAPI(どこかに落ちててWebでダウンロードできる)だと思うけど
0109nobodyさん
2009/05/20(水) 06:03:49ID:???0110nobodyさん
2009/05/20(水) 06:19:02ID:???0111nobodyさん
2009/05/20(水) 07:03:26ID:???今は何を使ったらいいの?
0112nobodyさん
2009/05/20(水) 10:18:11ID:???Rinari+emacsか
macならtextmateがオヌヌメ
0113nobodyさん
2009/05/21(木) 10:55:01ID:???from_forでf.time_selectだと:default => {:hour => }があるみたいですが、
time_selectだと上記オプションでは上手くいきません。
Controller側に設定したい時間オブジェクトがあるのでデフォルト値をそれにしたいのですが…。
0114113
2009/05/21(木) 13:29:08ID:???0115nobodyさん
2009/05/21(木) 18:30:28ID:Fhc0Zbqv・Aptana RadRails重い
・NetBeans めちゃ軽い ただし、rspec、autotest等最新版に対応してないので、小細工がいる。(動かせることは動かせる)
0116nobodyさん
2009/05/21(木) 18:34:10ID:???0118115=117
2009/05/21(木) 20:01:06ID:???今までの苦労はなんなんだよw
>>116 にはありがとうといいたい。
・NetBeans 6.7m3 Download
http://bits.netbeans.org/download/6.7/m3/
・NetBeans Nighly ダウンロード
http://bits.netbeans.org/download/trunk/nightly/latest/
0119nobodyさん
2009/05/21(木) 20:43:24ID:???0120nobodyさん
2009/05/22(金) 23:09:09ID:???ぶっ壊れるんだけど、同じ現象解決した人いないか?
file_fieldメソッドをviewに読み込んでPOSTしてるんだけど、
受け取ったファイルを試しに自作のBLOB型のカラムに
自作table.blob型のカラム = params[:file_fieldのid].read
で保存したら正しく保存されたっぽい。
rails2.3.2
attachment-fuプラグインは、:storageオプションを:db_fileにすると
db_filesテーブルに保存してくれるようだが、中を覗いてみると
バイナリがかなり欠損して、元ファイルの1/5くらいのサイズになっている・・・。
0121nobodyさん
2009/05/23(土) 01:34:50ID:???0122nobodyさん
2009/05/23(土) 07:49:36ID:???0123nobodyさん
2009/05/23(土) 09:42:19ID:???覚えるのは何ヶ月くらいかかるの?
0124nobodyさん
2009/05/23(土) 10:59:34ID:???0125nobodyさん
2009/05/23(土) 11:47:12ID:???いや、ローカルの開発サーバ…。
windowsなのが原因なのかもしれん。
とりあえずレスありがとう。
0126nobodyさん
2009/05/23(土) 15:56:37ID:???パッチ送った気がするけど、スルーされてたのか。。。
中で一時ファイルとかをFile.read(path)的に読んでるところがあったらそれをFile.open(path, "rb", &:read)に
書き換えればうまくいくのではないだろうか。
0127nobodyさん
2009/05/24(日) 01:42:02ID:xGQhsS/Xよくない例かもしれないのですが、
person.parents << parent = Parent.new
person.children << GrandParent.new(:grand_parent_id => parent.id)
person.save
みたいなことがしたいのですが、これだとChild.grand_parent_idがnilになってしまいます。
このような場合で、あるテーブルと、そのテーブルにhas_manyな関係のテーブル2つ(合計3つ)を同時にsaveするうまい方法があったら教えていただけないでしょうか??
ご教示頂けると幸いです><
0128nobodyさん
2009/05/24(日) 14:19:16ID:???少し面倒でも、トランザクションの中で1つ1つsave!するほうが確実だと思うよ。
トランザクションだから同時に保存するという要件も満たしているし。
begin
ActiveRecord::Base.transaction {
parent.save!
person.save!
children.save!
}
rescue Exception
end
0129nobodyさん
2009/05/24(日) 21:48:48ID:???例)
興味のある麺類を選んでください。
□ うどん
□ そば
□ きしめん
↑ユーザプロフィールと麺類を多対多で関連づける
最初はact_as_bitsで実装して上手く行っていたのだけど、要素の順番を保存できないのと
要素を動的に追加したいという要望がでてきてact_as_bitsでは対応できなくなったぽい
んで、代替策として多対多の関連を定義して対応することにしたんだけど、
railsのモデル更新系フォームヘルパが複数選択のチェックボックス(パラメータを配列で送る)に
対応してないじゃないですか!
仕方がないのでチェックボックスのname属性を自力で書き換えたり
モデルにチェック/非チェックを返すアクセサメソッドの定義を追加したりしたんだけど
なんだかすごいメンドクセーという次第でして
この辺を上手いこと解決できる方法やプラグインなどはないでしょうか?
要望としては、できればcheckbox_tagは使いたくないです
0130nobodyさん
2009/05/24(日) 22:03:09ID:???0131nobodyさん
2009/05/24(日) 23:13:20ID:???0132nobodyさん
2009/05/25(月) 00:14:50ID:???0133nobodyさん
2009/05/25(月) 00:44:27ID:???0134nobodyさん
2009/05/25(月) 00:54:00ID:???実物は集計する必要もない項目ですが、こっちの方がイメージしやすいかと思いまして
■ このスレッドは過去ログ倉庫に格納されています