【Ruby】Ruby on Rails Part7at PHP
【Ruby】Ruby on Rails Part7 - 暇つぶし2ch39:nobodyさん
09/05/04 03:25:03
>>38
管理用コントローラに、メソッドを追加するっていうこと?

40:38
09/05/04 10:34:22 MqCVRAIX
>>39
Admin::UserControllerを 作ってlistやdeleteアクションを定義する感じ。

41:nobodyさん
09/05/04 22:11:00
>>40
ありがとう。37です。
あんま想像つかないけど、そんな方法があるのか。

結局自分は、コントローラとモデルとテーブルを1:1:1になるよう用意することにして、
(コントローラは増えることもあるけど)
各コントローラの参照系以外のメソッドに管理者認証を求めるフィルタを設定した。

42:nobodyさん
09/05/07 15:29:56 6IKl0wLq
すいません質問させてください。
カラムがid, user_id, name
のテーブルがあったとして、それのActiveRecord::Baseの継承クラスのインスタンス5つが配列aに格納されているとします。
この配列aの中に、user_idが5であるインスタンスがあった場合それを取り出し、なかった場合nilかfalseを返すような処理を書きたいのですが、どう書くのが一番スマートでしょうか??
ご教示頂けると幸いですm(_ _)m

43:nobodyさん
09/05/07 18:47:11
>42
まず、あなたなりに書いたらどうなるの?
その後教えてあげます。

44:nobodyさん
09/05/07 21:22:30
>>42
既にふつうの(=ARのHasManyProxyなどでない)配列になっているっ
てことだよな?
Enumerable#find / detectでも好きに使えばいいじゃん。



45:42
09/05/08 00:27:37 XobVG3ns
>>44
ありがとうございます!
findの使い方よくわかっていませんでした。。

46:nobodyさん
09/05/09 07:16:53
>>41
コントローラはnamespace使って管理側とユーザ側で分けた方がよいね
script/generate controller admin::users

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



47:nobodyさん
09/05/09 07:27:31
:butyo とか :tanto とか :baito とかもあると統制上便利。

48:nobodyさん
09/05/10 16:27:57
>>46-47
なるほど・・・。
名前空間でコントローラを整理できることを知らなかった。
ありがとう!

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

わけた方がすっきりするんだろうけど、一般ユーザと会員ユーザの出来ることは
ほとんど同じなんだよなぁ。

49:nobodyさん
09/05/10 16:38:53
今すぐに作り直す必要はないと思うよ。
長く運用してると、機能追加などで次第に一般ユーザと会員ユーザの違いが
大きくなっていくので、そのときに整理し直してもいいと思う。


50:nobodyさん
09/05/10 22:14:49
むしろ意味的・機能的に全く別物でない限り、一般ユーザと会員ユーザはコントローラ分けないほうがいい場合もある
システムごと分離するか、コントローラを分割するか、ユーザのrole機能で対応するかは適材適所やね


51:nobodyさん
09/05/11 00:35:14
一括だとロールに突っ込めると便利だけど、ロールの使い方知らないと涙目。

52:nobodyさん
09/05/11 21:33:11
>>49-50
とりあえずそうしてみる。

何回か組んで失敗しないと、理想的なrailsプログラムは組めないと感じた。

53:nobodyさん
09/05/11 23:14:24 2slawtRU
Rails + rspec + rspec-rails で開発しています。
Rails 2.1.1 / rspec 1.1.12 / rspec-rails 1.1.12

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

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

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

 it "A..." do
 end
end

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

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

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

 it "D..." do
 end
end

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

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

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

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

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

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

○質問4:
ちなみに spec を実行後に DB の中身を覗くと、レコードが残っているので、これはそういうものみたいですね。
※fixture で投入されたデータのトランザクションと、
 テストメソッドの中で model.save 等で保存されるトランザクションは違う?

55:鉄道教信者{鉄ヲタ(鉄道マニア)}
09/05/12 00:01:43 i2JJHx+d
あるレンタル鯖でのトラブル

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

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

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

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

hahahaha!

56:nobodyさん
09/05/12 20:34:40
よくある話
掃除のおばちゃんが掃除機のコンセントがないからと
勝手に電源ケーブル抜いてそのまま忘れて帰るんだよ


57:nobodyさん
09/05/12 20:35:25
もろひろゆきじゃん

58:nobodyさん
09/05/12 20:36:18 8mXS3koF
すいませんちょっとお聞きしたいのですが

if x=='dog'
Dog.find :all
elsif x=='cat'
Cat.find :all
elsif x=='horse'
Horse.find :all
end

59:58
09/05/12 20:37:09 8mXS3koF
のようなことをしたいんですが、これって一行で書けないでしょうか?
教えて頂けると幸いです。

60:nobodyさん
09/05/12 20:37:20
fixtureなどさっさと捨ててしまえ
代わりにfactory girlをどうぞ

61:nobodyさん
09/05/12 20:44:51
一行ったって意味合いが色々あんだろうが

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

モデルに多態性を持たせたいのならSTIかポリモルフィック関連を調べてちょ

62:nobodyさん
09/05/12 20:58:40
elseとか考えなくて良いなら
x.classify.constantize.find :all


63:nobodyさん
09/05/12 21:02:44

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



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

>classify.con...
うおぉぉ。。
rubyすごすぎる(笑)

65:nobodyさん
09/05/12 21:18:38
>>62
xが外部入力だったら超怖い気がするのです…w
フィルタかける方法ないの?

66:nobodyさん
09/05/12 21:29:38
じゃ、
x.classify.constantize.find(:all) if ["dog", "cat", "horse"].include?(x)


67:nobodyさん
09/05/12 21:36:33
>>64
ビジネスロジック層で得意げにメタプログラミングを駆使とか絶対やめとけよ・・・
いつか刺されるぞ・・・


68:nobodyさん
09/05/12 21:43:04
それでソースがすごくすっきりするならいいと思うけど困るときもあるね
「使いたいから使う」みたいなのもたまに見かけるし

69:nobodyさん
09/05/13 05:15:55
>>50
>ユーザのrole機能
そんな機能があったんかー、しらんかった。pluginかな?
ActiveRecord継承のRoleモデルつくってた。
まだ初めて半年だけど、もう以前の環境(php)には、戻れなウィッシュ。

70:nobodyさん
09/05/13 08:44:50
単にrole based access controlを実装するという話だと思った。
確かにActiveRbacというプラグインもあるけど。
概念はRails Recipesにも載ってるね。



71:nobodyさん
09/05/16 18:32:34
よくわかっていない質問ですまないのですが、お聞きください。

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


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

 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.)

72:nobodyさん
09/05/16 18:47:23
vendor/plugins/プラグイン名/lib/generatorsにファイルがあれば、
generatorとして認識される。
こいつがそういう配置になってないだけ。


73:nobodyさん
09/05/16 23:17:33
@categories = Category.find(:all, :order => :category)

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

74:nobodyさん
09/05/16 23:28:15
:orderの値には「SQLの一部」を書くことになっているので、その方法でOK。
シンボルを書けるのは、単にSQLに埋め込むときにシンボルを #to_s した
ものが入るから。



75:nobodyさん
09/05/16 23:37:41
なるほど、レスさんくす。

通常あり得ないとは思うけど、カラム名が変わったときにシンボルで指定できると
修正が1カ所ですむけど、カラム名直書きしてしまうと、そのカラムが含まれる
すべての箇所を修正しないといけないから、何かスマートな方法あるかなと思っただけなんだ。

76:nobodyさん
09/05/17 00:00:07
class Category
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が走るということもない。


77:nobodyさん
09/05/17 00:11:22
なるほど、ありがとう!
上の方法の方がスマートなので、そっちで書いてみます。

78:nobodyさん
09/05/17 00:18:09
> カラム名が変わったときにシンボルで指定できると修正が1カ所ですむけど

この意味が分からないのだが、
例えば「category」カラムの名前が「business_category」に変わったとしたら、
その1カ所をどういうふうに修正するの?

79:nobodyさん
09/05/17 00:35:24
すみません、シンボルをどこかに実体があって、それを
シンボリックリンクのように参照しているものだと妄想してました…。

80:nobodyさん
09/05/17 02:22:44
>>79
なるほど、了解。自分が知らない重大なことかと思ったよ。

81:nobodyさん
09/05/17 15:05:25
>>72
なるほどやっぱりそうなんですね。

というか、railsのソース見てて思ったんですが
Rubygemsでも特定の配置にしたら、railsのgeneratorとして読み込んでくれるんですね。
利用者としてはこっちの方が簡単だ。
ちゃんと動くの確認したら、gems化の要望出しときます…。

82:nobodyさん
09/05/17 15:13:57
ところでアプリケーションテンプレート使ってる?
何となくどんなの使ってるかしりたいんで皿島元々

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 => 'URLリンク(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'"

83:nobodyさん
09/05/17 15:21:02
いかん。すげー中途半端なテンプレだな。
なにやりたいかってbortぽいのをアプリケーションテンプレート使って作りたいんだけど素人は一からコツコツやれってことだろなぁ。

84:nobodyさん
09/05/17 17:37:58
>>82
自分はまったく使ってないわ。
そんなに新規で作る事が少ないというのもあるけど、
一から設定するのもそれほど手間じゃないから。

今よく使うのはこんなもんかな。
mislav-will_paginate
jpmobile
postgres
rmagick
i18n_genrators
mongrel
mongrel_cluster
バージョン管理はSubversion。
そのうちgitも試してみたいと思う。

公開する時は、Passengerを使う事が多くなってきたけど、
スペックが低いサーバだとPassengerよりmongrelを複数起動して、
Apacheのproxy_balancerで動かすほうがレスポンス早いので、mongrelもしばらく使うつもり。

85:82
09/05/18 00:04:25
アプリケーションテンプレート集みつけたんで一応はっときますよ
URLリンク(github.com)

>>84
確かにPassengerの初回起動は遅いもんなぁ。
mongrel使った事ないから試してみるよ!


86:nobodyさん
09/05/18 00:53:06
>>85
mongrel 使ったことないということだけど、
普段(ローカルの開発環境) は webrick 使っていて、本番環境は Passenger を使っているの?

87:82
09/05/18 01:22:25
>>86
うん
開発webrickで本番Passenger。
monoで開発してた時も開発XSP本番mod_monoだったなぁ。
なんとなくapacheの方が安定してるのかなぁという思い込みでt

88:nobodyさん
09/05/18 01:24:25
なぜ今さらMongrel? もう1年くらい開発止まってるでしょ。
今ならThinかEbbじゃないの。

89:86
09/05/18 02:32:23
>>87
なるほど、どうもありがとう。

>>88
私はRailsはじめて2ヶ月弱なので、そういうのがわからないんです。
職場のプロジェクト環境が、ローカルの開発環境は mongrel で(gem install だけで入るし、Windows でも動くので)、
本番をどうしようかと話していてます(本番は passenger の予定)

Passenger が出てくる前は、雑誌やwebを読んでいて、
fastCGI、lighttpd、apache + mongrel_cluster という組み合わせがあったけど、
いまは本番運用ではどれが定番なんですか?(Linuxの場合)
Thin と Ebb というのは初めて知ったのでこれからググってくる。

90:nobodyさん
09/05/18 08:33:09
ここのスレ見て参考にしてPassengerにしたら1日半に1回くらい順調に落ちる。ありがとな。
ホスティングだからメモリの問題だとは思うけど。

91:nobodyさん
09/05/19 06:26:08
2年前くらいにrailsはアジャイルだって騒がれてたけど
今でもrailsは開発早いの?
それとも何か新しいのでた?
ほかの言語もrails並に早くなった?

92:nobodyさん
09/05/19 07:14:33
結局、腕の善し悪しに左右されます

93:nobodyさん
09/05/19 08:26:28
>>91
体制次第。


94:nobodyさん
09/05/19 11:23:22
バージョン頻度と、その互換性のなさに少し微妙な空気が流れている気がする

95:nobodyさん
09/05/19 11:30:03
ほんとバージョン管理しんどいな
rails3がでてmerbと統合したら、、

96:nobodyさん
09/05/19 11:55:09
rails は黒魔術が多いなぁ。
複数人でやると、こんな書き方があるのかーというばかり。
聞けば分かるけど、読んだだけではすぐには分からない書き方が多いような気もする。

97:nobodyさん
09/05/19 12:13:21
読んで分からんというか、そこだけ読んでもわからんというのはある。
動的にメソッド追加してて、どこに定義があるのかctagsで追えないとか。

でも勘とgrepでソース読めばなんとかなるレベルだとは思う。
ruby-debugがマシになってきて、railsの動的なコードの山もあまり怖くなくなってきた気がしなくもない。


98:nobodyさん
09/05/19 12:57:37
>>96-97
それも「開発効率が悪い」の一種だよね

99:nobodyさん
09/05/19 17:55:25
始めて数日のひよっこだけどメソッドを追えないのは
規定を知らないだけで開発効率関係ないと思う
動的にメソッド入るならコメも入れてよって泣きながら探してる

100:nobodyさん
09/05/19 22:26:10
railsって始めるのに何をしたらいいの?
rubyを書けること?
MVCを理解すること?
railsの統合開発環境をインストールして、どっかの本を見ながらいじればいいの?


101:nobodyさん
09/05/19 22:34:10
APIが理解できれば何とでもなる

102:nobodyさん
09/05/19 22:38:35
>>100
プログラム初心者だと大変かもしれない。
Ruby初心者でも他の言語の経験があれば大丈夫かな。

Rubyが理解できる事が必須だけど、Railsと一緒に覚えていけばいい。
まずは環境のインストール方法が分かりやすく載っている本を買って
そのとおり進めていくほうが迷わないのでおすすめ。
本が扱っているバージョンはちょっと古いけど、そのバージョンに自分の環境を合わせる事が大切。
うっかり最新版を入れてしまうと、Railsの仕様が変わっているために迷子になってしまう。


103:nobodyさん
09/05/19 22:39:09
railsで何を作るかをまず決める

104:nobodyさん
09/05/19 22:57:59
何が作れるか分からない
例えばPHPならデータベースへの接続がしやすいとか、
なんとなーくこういうのに向いてるよっていう指標は無いの?
と、全くrubyを知らない俺が聞いてみる。

105:nobodyさん
09/05/19 23:18:46
PHPでやれることはRailsでもできる
好みの問題という気がする。


106:nobodyさん
09/05/20 02:04:50
Webで公開されているAPIがjavaのとき
Railsでは使えないの?
それとも使えるrailsのgemがあるの?

107:nobodyさん
09/05/20 02:19:51
Web APIということはHTTPを喋って何らかのボディを返すと
いうことなので、ふつうは言語不問。
ボディの内容を解釈できるかは足回り(XMLとかJSONとかなら
パーサが要るわけで)次第。



108:nobodyさん
09/05/20 02:53:06
レスをそのまま解釈すれば、
普通のAPI(どこかに落ちててWebでダウンロードできる)だと思うけど

109:nobodyさん
09/05/20 06:03:49
Rails3ってでた?



110:nobodyさん
09/05/20 06:19:02
出たよ。なかなか好印象。

111:nobodyさん
09/05/20 07:03:26
RoRの開発環境って色々あるけど、
今は何を使ったらいいの?


112:nobodyさん
09/05/20 10:18:11
IDEは重いからエディター派
Rinari+emacsか
macならtextmateがオヌヌメ

113:nobodyさん
09/05/21 10:55:01
time_selectとかdate_selectのデフォルト値ってどうやって変えればいいですか?
from_forでf.time_selectだと:default => {:hour => }があるみたいですが、
time_selectだと上記オプションでは上手くいきません。
Controller側に設定したい時間オブジェクトがあるのでデフォルト値をそれにしたいのですが…。

114:113
09/05/21 13:29:08
すみません、自己解決しました。

115:nobodyさん
09/05/21 18:30:28 Fhc0Zbqv
>>111
・Aptana RadRails重い
・NetBeans めちゃ軽い ただし、rspec、autotest等最新版に対応してないので、小細工がいる。(動かせることは動かせる)

116:nobodyさん
09/05/21 18:34:10
6.7で対応するんだろ?

117:nobodyさん
09/05/21 18:50:04
>>116
Betaで開発してもOKなら、6.7でもいいと思うよ

118:115=117
09/05/21 20:01:06
NetBeansためしにNightlyにしたら、autospecとかrspecとかもちゃんと動いた…。
今までの苦労はなんなんだよw

>>116 にはありがとうといいたい。

・NetBeans 6.7m3 Download
URLリンク(bits.netbeans.org)

・NetBeans Nighly ダウンロード
URLリンク(bits.netbeans.org)

119:nobodyさん
09/05/21 20:43:24
betaで良ければって言うけど、正式板リリースは6月じゃなかったか?


最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch