トップページ⇒php
990コメント286KB

Ruby on Rails のスレ が

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん2008/04/06(日) 04:59:29ID:???
無いのはどうしてだろう?
消えたのか?
流行ってないのか
死亡
0075nobodyさん2008/05/03(土) 09:52:07ID:???
mysqlのストアドを使いたいのに、ググってみても
全く参考になるサイトがないのは、みんな使ってないということかな?
どうしても必要なのに...
参考になるサイトを知ってる方、教えて頂けませんかm(..)m
0076nobodyさん2008/05/03(土) 13:37:26ID:???
>>74
どんなだよ!言ってみれ。
適当なこというな。PHP野郎が
0077nobodyさん2008/05/03(土) 14:53:36ID:???
>>75
それってRailsと関係あるの?
http://dev.mysql.com/doc/refman/5.1/ja/stored-procedures.html
0078752008/05/03(土) 23:47:22ID:???
>>77
ありがとうございます。
説明が下手ですみません。
ストアドファンクションの場合は結果を
@obj=Model.find_by_sql("select (ストアドファンクション名)")
等で受け取ることができるのですが、
ストアドプロシージャが結果をテーブルで返す時の結果の受け取り方が分かりません。
MySQL Query Browserで「call sp_test()」で実行してみて結果が出力されるのは
確認しています。
この場合、同じように
@obj=Model.find_by_sql("call sp_test()")
かなと思ったのですが、エラーがでました。
ストアドで吐き出される結果のrailsでの受け取り方を知りたいのです。
宜しくお願い致します。m(..)m

0079nobodyさん2008/05/04(日) 00:08:06ID:???
modelでやらずにadapterのAPIで叩けば?
0080nobodyさん2008/05/04(日) 00:44:10ID:???
rorってすっかり勢いを失ってしまったな。
こんなスレタイが唯一のrorスレだなんて
0081nobodyさん2008/05/04(日) 03:09:27ID:???
>>78
pp ActiveRecord::Base.connection.select_all("...")
こういうこと?

>>80
2chじゃなくてblogやリアルコミュでやってるひとはしっかりいるよね。

0082nobodyさん2008/05/04(日) 03:14:28ID:???
>>80
相当情報も貯まったし
ぶっちゃけ人に聞くより、本読んだり、ググったり、API読めば
出来ない事は無いからほとんどの人は自己解決してるんじゃなかろうか。

3年近くRails使って仕事してるけど、今度Perlで動いてるシステムを
Rails2化する事になって、DB定義どうするかが一番の悩みだw
0083nobodyさん2008/05/04(日) 06:51:18ID:???
いいなぁ
漏れんとこはPHPばっかだ
0084nobodyさん2008/05/04(日) 20:19:38ID:???
PHPなら職の募集も多いしいいんジャマイカ?
Railsエンジニアだなんてどこも募集してねぇ・・・orz

結局Railsは趣味程度なんだろうな(´・ω・`)
0085nobodyさん2008/05/04(日) 21:31:37ID:???
なんだかんだいってまだJavaが一番効率よく儲かるかもしれんね
0086nobodyさん2008/05/04(日) 22:58:45ID:???
link_to 'Delete', :action=>'destroy', :id=>@item
とかすると、HTML で JS が吐かれてその中に
s.setAttribute(¥'value¥', ¥'572726412773a720dcb04dc130a863f944b4082b¥');
のような、セッションID? のようなのが埋め込まれてますが、この値を自分で取り出すにはどうしたらいいですか。
session_id とか transaction_id みたいなAPIを探してみたんですが、ないみたいです。
0087nobodyさん2008/05/04(日) 23:01:14ID:???
>>86
paramsの中見てみな
0088nobodyさん2008/05/04(日) 23:42:38ID:???
>>87
{"action"=>"index", "controller"=>"items"}
という内容でした。
0089nobodyさん2008/05/05(月) 00:38:10ID:???
protect_from_forgeryのやつじゃないの?
0090nobodyさん2008/05/05(月) 01:23:19ID:???
>>88
中に
:session_key => '_session_id'のような事かいてないか?
:session_id => 'safdaeuaihfoa;n'
みたいな・・・

params[:session]
でダメならセッションが効いてないのかもしれん・・・
0091nobodyさん2008/05/07(水) 00:30:28ID:Fjgg9vWs
86ではないけど、俺も同じようなとこで悩んでる。
とある理由で、authenticity_tokenの値とセッションの値(CookieStoreのあの長い文字列)を
ビューで取得したいんだが、なにかAPIみたいなものはないのかなぁ。
リクエストから取得すればいいじゃんって言われるかもしれないんだけど、それじゃ
だめなんすよね。。
0092912008/05/07(水) 00:44:52ID:Fjgg9vWs
authenticity_tokenはわかった。

<%= form_authenticity_token %>
0093nobodyさん2008/05/07(水) 00:46:04ID:???
>>91
authenticity_tokenのほうは、
名前は request_forgery_protection_token シンボルなので必要ならto_s
値は form_authenticity_token
0094nobodyさん2008/05/07(水) 00:47:27ID:???
>>91-92
ナイス解決

こういう情報共有みたいなのあるのは良いよな!
0095nobodyさん2008/05/07(水) 00:58:10ID:???
セッションを保持しているクッキーの名前はconfig/environment.rb
に書いてあるはず。

config.action_controller.session = {
:session_key => '_test_session',
:
:

<%=debug(cookies['_test_session']) %>

中を見る方法は action_controller/session/cookie_store.rbのunmarshalの定義を参照。
0096912008/05/07(水) 02:13:07ID:Fjgg9vWs
みなさんいろいろ情報どうもです。
結局セッションの値っつーか、CookieStoreの長い文字列は
JavaScriptでhiddenに埋め込むようにしたんだが、ここでへこむ事態発生。
CookieStoreの値をhiddenで送っても、Railsは認識してくれないくさい。
これからソース追ってみるけど、たぶんCookieからしか見てないと思われる。
CookieStore使う方は注意してください。

間違いであれば指摘してくれ。
0097nobodyさん2008/05/07(水) 03:00:02ID:???
クッキーなんだから、フォームの一部として送るまでもなく、
ブラウザがHTTPヘッダに入れてくれ……ないの?
0098912008/05/07(水) 03:11:52ID:Fjgg9vWs
>>97
あれなんすよ、FLASHからPOSTしたいんすよ。で、セッションも維持したい。
どうもIE以外のブラウザからFLASHでPOSTするとCookieをうまく送信してくれなくて。
0099nobodyさん2008/05/07(水) 17:50:37ID:???
create_table :organizations do |t|
t.string :name, :null=>false, :unique=>true
t.integer :parent_id # 親organizationを指すID
t.timestamps
end

とあったときに、t.integer :parent_id を t.references を使って書くとどう書きますか。
マニュアルだとわかりませんでした。
http://api.rubyonrails.org/classes/ActiveRecord/ConnectionAdapters/TableDefinition.html#M001224
0100nobodyさん2008/05/07(水) 17:55:40ID:???
t.references :parent
0101nobodyさん2008/05/07(水) 18:29:22ID:???
>>100
t.referencesではカラム名は指定するけど参照先は指定できないってことですか?
0102nobodyさん2008/05/07(水) 18:42:57ID:???
矢次に質問をするでない。それはmodelで設定せよ。
0103nobodyさん2008/05/07(水) 19:48:24ID:???
連続して質問したらだめなの?心狭いなあ。でも助けてくれてありがとう。
0104nobodyさん2008/05/08(木) 03:00:26ID:???
最近思ったんだがFastCGIって結構やればできる子かもしれん・・・
0105nobodyさん2008/05/08(木) 10:27:39ID:???
>>104
FastCGIは、Rails以外ならmod_rubyよりずっと出来る子だけど、Railsでの評判は芳しくない。なぜ?


それはそうと、Employeeってモデルで、社員番号をカラムとして持つ場合、これはEmployee#idからauto_incrementを外して使ったほうがいい?
それともEmployee#idはそのままに、別個にemployee_numberとかして持った方がいいのかな。
このへんよくわからんのでアドバイスちょーだい!
0106nobodyさん2008/05/08(木) 10:44:45ID:???
>105
別個に持ってindexはる
0107nobodyさん2008/05/08(木) 11:55:19ID:???
>>106
レスさんくす。indexはるってのは、:unique=>trueとかつけると自動的に張られるもん?
聞いてばっかですまん。
0108nobodyさん2008/05/08(木) 12:28:02ID:???
add_index。api documentみれ
0109nobodyさん2008/05/08(木) 12:28:54ID:???
>>107

add_indexしてください。
0110nobodyさん2008/05/08(木) 12:28:56ID:???
will_paginateが非効率なSQL発行してしまうらしいのですが、
現在修正されているのでしょうか?
修正される見込みはあるのでしょうか?

paginating_findを使っておいた方が無難でしょうか?
0111nobodyさん2008/05/08(木) 12:46:18ID:???
もまいで調べて報告しる!
01121102008/05/08(木) 14:05:01ID:???
はい >> 111

簡単そうだったので、ちょっと試してみました。

Parameters: {"action"=>"index", "per_page"=>"10", "controller"=>"products", "page"=>"2"}
Product Load (0.001225) SELECT * FROM `products` WHERE (name LIKE '%%' OR description LIKE '%%') LIMIT 10, 10
Product Columns (0.001095) SHOW FIELDS FROM `products`
SQL (0.006903) SELECT count(*) AS count_all FROM `products` WHERE (name LIKE '%%' OR description LIKE '%%')

無駄なことはやっていないようにみえます。
0113nobodyさん2008/05/08(木) 16:07:08ID:???
両方のクエリを見比べないと意味ないじゃん
あとクエリに違いが出るのってjoinした時じゃなかったかな
少なくともシンプルなクエリじゃどっちでも変わらんよ多分
01141102008/05/08(木) 16:56:17ID:???
なるほど・・・
すみません、勘違いしておりました。
will_paginateだと、確かにrelationの先にpaginateかけると、
全selectしてます。
0115nobodyさん2008/05/08(木) 18:43:11ID:???
Emacsのrailsモードって使っている人いる?

たとえば foo_controller.rb の FooControler#show() にカーソルがある場合、
view/foo/show.html.erb をひらくのに便利なコマンドとかある?
C-c f v だと "foo/show<TAB>" を入力しなきゃいけなくて面倒です。
0116nobodyさん2008/05/09(金) 01:13:57ID:???
>>115
C-c ↑ のことかな?
C-c C-p でもできるようにキーバインディングを変えてます。
0117nobodyさん2008/05/09(金) 12:59:17ID:???
>>116
ちょーさんくす
あいしてるよ
01181162008/05/09(金) 13:39:24ID:???
キーバインディング変更はこんな感じで

(define-key rails-minor-mode-map "\C-c\C-p" 'rails-lib:run-primary-switch)

あとは、Rail2.0でファイル拡張子に.html.erbを使うようになったのに対応して
rails.elの中でこんな設定をしておくとよい

(defvar rails-templates-list '("html.erb" "erb" "rhtml" "rxml" "rjs" "haml" "liquid"))
0119nobodyさん2008/05/09(金) 14:47:55ID:???
Railsで
select a.id, a.name, o.name
from accounts a, organizations o
where a.organization_id = o.id
order by o.name;
というSQLを発行するにはどうしたらいいですか。
Account.find(:all, :include[:organization])
でOK?
0120nobodyさん2008/05/09(金) 14:49:41ID:???
>>119
find_by_sql

変数取り込むならちゃんとエスケープしてからやれよ?
0121nobodyさん2008/05/09(金) 21:14:37ID:???
>>120
さんくす

> 変数取り込むならちゃんとエスケープしてからやれよ?
こういう心遣いができるおまえは優秀なエスパー
これからも地球の平和を守ってくれ
0122nobodyさん2008/05/09(金) 22:30:39ID:???
>>121
今SQLインジェクションアタックが盛んだからじゃね?
ttp://www.tokumaru.org/d/20080502.html

普通は
:conditions => ['hoge = ?' , params[:hoge]]
のようにすればいいけど、

フルSQLとかに変数使いたい時は
Hoge.find_by_sql("select * from hoges where hoge = #{connection.quote(params)}")
がオヌヌメ

ttp://pirochin.blogspot.com/2007/08/activerecordbaseconnectionquote.html
0123nobodyさん2008/05/10(土) 01:12:35ID:???
sanitize_sql(["select * from hoges where hoge = ?", params[:hoge]])
0124nobodyさん2008/05/10(土) 01:35:58ID:???
redmineを http://www.example.com/redmine/ で動かすことには成功しました。
http://www.example.com/~foo/redmine/ で動かしたい場合には
httpd.confをどのようにすればよいのでしょうか

DocumentRoot /usr/local/apache2/htdocs
RailsBaseURI /~foo/redmine
とすると
Passenger error #2
Passenger thought that the Rails application's "public" directory is "/usr/local/apache2/htdocs/~foo/redmine".
となり、必ずDocumentRoot配下を見るようになってしまいます。
0125nobodyさん2008/05/10(土) 01:50:18ID:???
情報足りないですねorz
Linux上でApache2.2.8+mod_rails(passenger-1.0.5)です。
0126nobodyさん2008/05/10(土) 01:55:26ID:NOkob+Vn
>>125
おぉ!mod_railsの情報か!!

ほとんどhttpd.confに書くんだっけ?
app/controller/foo/
app/views/foo/

って内部にサブディレクトリ切るんじゃダメだろうなぁ・・・
0127nobodyさん2008/05/10(土) 01:55:53ID:???
~を使えるのはUserDirそれ自体のみじゃないかな。
/~foo を本来のファイルシステム上の絶対パスで書いたらどうよ?
01281242008/05/10(土) 02:10:09ID:???
>>126
Apache上でRuby on Railsアプリケーションを動かす/Passenger(mod_rails for Apache)の利用
ttp://redmine.jp/tech_note/apache-passenger/
の通りにやるとサクッと動きました。

>>127
RailsBaseURI /home/foo/public_html/redmine と書いて ~foo/redmineにアクセスすると
Apacheがrailsを認識してくれず、普通のindexリスト表示になってしまいます。
0129nobodyさん2008/05/10(土) 23:24:32ID:???
URLが~foo/でなきゃいかん理由って何よ?
~fooの絶対パスを/foo に Alias して
http://example.com/foo/redmine
じゃだめなん?
0130nobodyさん2008/05/12(月) 12:32:39ID:MkPAtgFM
無料レンタルサーバーでRails使えるところあったら教えてください。
0131nobodyさん2008/05/12(月) 19:17:18ID:???
>>130
ないと思います。GoogleAppEngineでサポートされることを祈っておいてください。

質問なんだけど、migrationで、add_columnするときに、:null=>falseを指定できますか。
データが1行もないときはできると思うけど、すでにデータが入っているテーブルに:null=>falseつきでadd_columnしたいんです。
あるいはadd_columnしたあとにfind(:all).each でデータを設定してから、:null=>falseを追加するとか。
0132nobodyさん2008/05/12(月) 19:40:44ID:???
>>131
change_column という大変便利なものをみつけてしまいました。
add_column :items, :newcolumn, :string
Items.find(:all).each {|item| item.newcolumn = '...'; item.save! }
change_column, :items, :newcolumn, :string, :null=>false
でいけました。
0133nobodyさん2008/05/13(火) 10:33:55ID:???
>>132
> Items.find(:all).each {|item| item.newcolumn = '...'; item.save! }
なんとなく、めちゃくちゃ効率悪そうな気がするのは俺だけ?
0134nobodyさん2008/05/13(火) 11:06:43ID:???
データが数十万件とかあったら泣けるなw

:default => false 指定するのじゃダメだろうか?
カラム追加なら最初はデータ無いだろうし、
必要なデータは後でバッチかupdate文で更新するみたいな。

最悪、execute('alter add_column文')で無理やり書くとか。

結果出てるのに茶々入れてすまん
0135nobodyさん2008/05/14(水) 10:42:18ID:4b0MQpYR
>>130
InfoQ: HerokuとMorph AppSpaces:Railsホスティングの新しい二つのソリューション
http://www.infoq.com/jp/news/2008/04/heroku-hosting-morph-appspaces
0136nobodyさん2008/05/14(水) 21:53:25ID:ToATEiN6
過疎ってるなage
0137nobodyさん2008/05/16(金) 12:30:03ID:???
rspecを始めたばかりのものです。
テスト結果が大量にある時にどこでエラーが起きたか、コンソール表示だけだと
わかりにくいんですが、見やすく整形してくれるツールのようなものは
ありますか?

Story Runnerも試していて、プレゼンみてると
ttp://blog.davidchelimsky.net/files/BDDWithRspec.RubyConf.2007.pdf
の38ページ(Spec Framework)にそれっぽいものが出ていて使ってみたいんですが
リリースされているんでしょうか?
0138nobodyさん2008/05/16(金) 14:26:01ID:???
>>137
それはRspecとか関係なく、MacのGrowlじゃなかろうか
ttp://blog.tkmr.org/tatsuya/show/361-rails-macosx-rspec-zentest-growl

さぁ今すぐMacを買いに行くんだ

UTF-8 コードのRailsアプリはWinで開発よりMacの方がいいよなぁ・・・
0139nobodyさん2008/05/17(土) 00:27:54ID:???
そのプレゼンに載ってるのは、エディタTextMateの
RSpecバンドルの機能ですね。

とりあえず標準の範囲なら、spec/spec.optsで
--format specdoc
--backgtrace
と書くとか。
0140nobodyさん2008/05/17(土) 00:28:14ID:???
backtraceですた
0141nobodyさん2008/05/17(土) 15:18:33ID:???
うちも会社の開発環境、ほとんどみんなMacになった。
やっぱり楽。

それまでは
WindowsでVMwareとかは重くて断念。
WindowsでLinuxにログイン、が長かったけど、
いろいろ調査するのに個人ごとに環境があった方が良いって事になって結局Macに。
セミナーとかでも講演してる人、Macが多かったし。

デザイン組み込みとかの時も、
デザイナから上がってきた画像を目で見て確認するのに、
Macのopenコマンドとか、QuickLookがかなり便利。

0142nobodyさん2008/05/17(土) 15:27:47ID:???
我が輩はWindows XP + InstantRails + Eclipse + RadRailsを使っているなり。
RadRails様々なり。
0143nobodyさん2008/05/17(土) 15:39:08ID:???
>>142
うちも最初は同じような環境だったんだけど
Linux(UNIX系)でしか動かないソフトの使用が決定になって断念した。
0144nobodyさん2008/05/17(土) 18:47:59ID:???
Windows + colinux + vim( + zsh + screen)

puttyでsshで繋いで作業
eclipse使ってたときもあったけど重くて嫌になった
win上で開発するのはお勧めできない

>>141
vmwareは重いけどcolinuxは結構軽いよ
そりゃ金があるならmacに越したことはないけど
0145nobodyさん2008/05/17(土) 21:18:51ID:???
俺はWinXP上でRadRails(単体版)
最近はMacOSに興味あるなー
0146nobodyさん2008/05/17(土) 22:05:37ID:???
俺はNetBeans 6.1。Rails対応部分はかなり良いできだよ。
いろいろなところで補完が効くのがいい。
0147nobodyさん2008/05/17(土) 22:14:09ID:???
AptanaとかNetBeansて使いやすいんだが、重くね?

C2D1.8G mem1Gのマシンじゃギリギリだ・・・orz
mem2G以上はやっぱほしいよな
0148nobodyさん2008/05/17(土) 22:45:26ID:???
>>146
俺はNetBeansとか補完IDE無しでRuby書ける奴凄いと思うよ。
理解できない。
0149nobodyさん2008/05/17(土) 22:48:53ID:???
会社はThinkPad X60とかなんで、AptanaとかNetBeans重くて断念。
Linuxサーバに繋いでvi, emacsでやってる。
補完にはあまり頼らないなぁ。
0150nobodyさん2008/05/17(土) 23:04:09ID:???
軽いとか重いとかは環境によるから一概には言えないけど
Netbeans 6.1は結構軽くなってると思うけどなあ。
あとRuby機能のみ入ったのをダウンロードするのが軽くて良いと思う。
0151nobodyさん2008/05/17(土) 23:14:55ID:???
Rubyのみとかできるのか〜
補完機能は要らないけど、Grepやエクスプローラー機能は秀逸だし
使ってみよう。�d

>>149
XGAモニタでIDEはオススメできないw
0152nobodyさん2008/05/18(日) 00:37:58ID:???
補完=無駄な入力省略とすら・・・betterPerlな人たちか・・・
0153nobodyさん2008/05/18(日) 01:40:08ID:???
いや、クラス名やメソッド名が元から無駄に長くないので。
0154nobodyさん2008/05/18(日) 01:45:34ID:???
長さだけの問題じゃねーだろw
0155nobodyさん2008/05/18(日) 03:36:48ID:???
>>147
メモリ1.5GBを境に劇的に変わると思う
0156nobodyさん2008/05/18(日) 21:32:48ID:???
ActiveRecordで任意のSQL文を発行するにはどうしたらいいですか
具体的には alter table ... とか select setcount() とかを実行したいです。

>>154
同意
0157nobodyさん2008/05/19(月) 00:20:37ID:???
Model.find_by_sql
ActiveRecord::Base.connection.execute
0158nobodyさん2008/05/19(月) 02:13:13ID:???
>>142→>>144→macの流れだな。
aptanaは前のマシンだと重くて駄目だった。
0159nobodyさん2008/05/19(月) 11:06:18ID:???
aaa.find(:all, :include=>:bbbb, :select=>'name')のように別テーブルと結合した場合、
:select が効かないんですけどなんとかなりませんか?
0160nobodyさん2008/05/19(月) 14:17:14ID:8IiAUL/0
>>141-151
すごい参考になりました。
みなさんけっこう工夫されてますね
0161nobodyさん2008/05/19(月) 15:08:45ID:???
>>159
’’の中はSQLだから

hoge = Foo.find :all ,
:select => 'foos.id , baas.name',
:include => [:baa]

みたいにどのテーブルのどのカラムって指定しないと無理じゃね?
0162nobodyさん2008/05/19(月) 15:35:10ID:???
>>157
さんくす
ActiveRecord::Base.connection.executeを使わせてもらいました。
01631592008/05/19(月) 16:39:27ID:???
>>161
テーブル名.カラム名って書いてもやっぱりだめでした。
必要なカラムの値のみ取得したいのですが、全カラムの値が返ってきます。

:includeを使うと SELECT * でSQLが作られるんでしょうかね?
01641592008/05/19(月) 16:42:39ID:???
>>161
お礼言ってなかった。
サンクス。

その後、:include ではなく :joinsを使えば :selectオプションが効くのはわかりました。

0165nobodyさん2008/05/19(月) 18:27:04ID:???
Rubyをシェルスクリプト的に使っているんですけど、
あるスクリプトを実行し終わったらirbに入るようなこと
できますか?

要するにirbでいろいろ操作したいんですけど、
そこにいたるまで初期化命令が沢山あるんで、

require 〜
require 〜
require 〜
をした状態でirbのシェルに入りたいのです。
01661652008/05/19(月) 18:40:47ID:???
自己解決しました
0167nobodyさん2008/05/19(月) 19:00:21ID:???
>>164
:include はモデル間でのリレーション
:joins はSQLでのリレーション

:select区指定するような、動的な場合は:join使うとか
モデルにそれ用のメソッド追加するといいかもしれない
0168nobodyさん2008/05/19(月) 19:20:30ID:???
create table books (
id integer primary key auto_increment,
title varchar(256) not null,
price integer
);
というテーブルがあったとき、Book#price は nil を返す可能性があります。
そこで
class Book < ActiveRecord::Base
alias _price price
def price
_price || 0
end
end
みたいなかっこわるいことしてるんですけど、もっといい方法があれば教えてください。
0169nobodyさん2008/05/19(月) 19:28:31ID:???
テーブル定義で
 price integer not null default = 0 ,

migrateだと
 default => 0 ,:nil => false
のような指定じゃダメか?
0170nobodyさん2008/05/19(月) 22:16:59ID:???
>>165-166
自己解決した内容プリーズ
irb -rhoge -rhage -rhige ?
0171nobodyさん2008/05/19(月) 23:47:19ID:???
.irbrc に書いとくのもひとつみたい
0172nobodyさん2008/05/20(火) 10:31:27ID:???
>>165
個人的にはどういう用途でrubyスクリプト書くのか気になるな
0173nobodyさん2008/05/20(火) 10:41:32ID:???
require 'irb'
IRB.start
でirbのプロンプトが出せるので、そこまでの準備はご自由にという感じだな。

0174nobodyさん2008/05/20(火) 13:01:56ID:???
2.1の新機能はよさそうですね。特に named_scope。
正式リリースが楽しみです。
■ このスレッドは過去ログ倉庫に格納されています