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

【Ruby】Ruby on Rails Part10

レス数が1000を超えています。これ以上書き込みはできません。
0001nobodyさん2010/08/28(土) 19:27:42ID:Er5MNJZv
■前
【Ruby】Ruby on Rails Part9
http://hibari.2ch.net/test/read.cgi/php/1266563593/

■参考サイト
<英語>
本家: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/

http://twitter.com/dhh
http://www.loudthinking.com/

0951nobodyさん2010/12/06(月) 16:25:59ID:???
link_toが遅いのはともかく、
6800個も1ページにリンクがある時点で間違ってる。
0952nobodyさん2010/12/06(月) 18:03:45ID:???
さすがにベンチマークだろ
0953nobodyさん2010/12/06(月) 18:25:52ID:???
ベンチマークって言うより、いじめだな
0954nobodyさん2010/12/06(月) 20:00:50ID:???
6800個がダメなら何個ならいいの
0955nobodyさん2010/12/06(月) 20:11:00ID:???
関連名でJOINさせた時のテーブル名(エイリアス名)は、関連名をtableizeしたものの方が嬉しい気がするのだけど、
どうなんでしょう?

時々同一テーブルを複数回joinさせたい事があって、例えば
class Task < ActiveRecord::Base
 belongs_to :create_user, class_name: 'User', foreign_key: :create_user_id
 belongs_to :update_user, class_name: 'User', foreign_key: :update_user_id
end
のようなモデルがあって、Task.joins(:create_user, :update_user)をすると、
 INNER JOIN "users" ON "users"."id" = "tasks"."create_user_id"
 INNER JOIN "users" "update_users_tasks" ON "update_users_tasks"."id" = "tasks"."update_user_id"
な感じのSQLが発行されます。それより、
 INNER JOIN "users" "create_users" ON "create_users"."id" = "tasks"."create_user_id"
 INNER JOIN "users" "update_users ON "update_users"."id" = "tasks"."update_user_id"
の方が自分は嬉しい。
0956nobodyさん2010/12/06(月) 23:48:40ID:???
joinsに文字列渡せば?
0957nobodyさん2010/12/07(火) 00:14:31ID:???
unionはつかえますか?
0958nobodyさん2010/12/07(火) 00:17:54ID:???
なんでも使えるよ
0959nobodyさん2010/12/07(火) 01:09:26ID:l8HqKN9H
Rails3をWindowsでproduction modeで動かすのって、
どうするのが、手軽でしょうか。
(個人のアプリなので、速度はほどほどで十分です。)

開発は、Netbeans使って問題なくできているけど、いざ動かそうとするとうまく動かない。

うまくWindowsサービスに登録できれば、一番手軽なんだけども。。
0960nobodyさん2010/12/07(火) 03:22:06ID:???
開発時的に一時的に動かすんじゃなくて常時動かしたいってこと?
0961nobodyさん2010/12/07(火) 10:38:25ID:scN2l8RE
質問させてください。
デバッグでpを使って出力されたものを見ることがあると思いますが、
printするものが大量だと サーバのログの一画面で収まらないことがあります。
rails server で起動して、吐き出されるログを見ているのですが、一画面
に収まらない場合は上にはみ出してしまったものを見ることができません。

development.log で見れるのかと思っていたのですが、development.logって
rails console で使ったもののログは残りますが、サーバーにアクセスされた際のログは残らない?のでしょうか?
development.logを見てもそれっぽいものが残っていませんでした。

どなたかいい方法ご存知でしたら教えて頂けますと幸いです。
0962nobodyさん2010/12/07(火) 11:25:33ID:???
Railsでデバッグをする7つの方法 - Hello, world! - s21g
http://blog.s21g.com/articles/212

0963nobodyさん2010/12/07(火) 20:05:58ID:???
>>956
レスあんがと。
SQL直書きの話ではなくて、関連名を使ったときのデフォルトの命名仕様がイケてないと思ってて
他の人はどう思ってるのかなと書き込みしました。
SQL直書きを気にする人は少ないのかな?
0964nobodyさん2010/12/07(火) 20:27:42ID:???
1.9のこの書き方、コロンが向き当ってるとなんか落ち着かんな
foreign_key: :create_user_id
って思うのは俺だけか
0965nobodyさん2010/12/07(火) 20:30:16ID:???
>>963
だってそれを気にして何の意味があるのかわからんもん
0966nobodyさん2010/12/07(火) 20:47:33ID:???
>>964
仲間発見。
09679592010/12/07(火) 21:00:43ID:4CuEmOpR
常時、Windowsで使いたいです。

Mongrelが、サービスに登録できてよさそうだったんですが
Ruby1.9では対応していなかったり。。

Apacheも考えましたが、うまく設定できず(泣)
0968nobodyさん2010/12/07(火) 21:42:22ID:???
>>964
キモイね
0969nobodyさん2010/12/07(火) 22:01:50ID:???
3.0.3で
has_many :table_a
の設定しているテーブルがあるのですが
table_b.table_a=[]

table_b.table_a.clear
を実行しようとすると
undifiened method 'eq'
というエラーが
出てしまうのですが
対処法知りませんか?

lib/active_support/whiny_nil.rb:48:in 'method_missing'
lib/active_record/associations/has_many_association.rb :78:in 'delete_records'
lib/active_record/associations/association_collection.rb:222:in 'block in delete'
lib/active_record/associations/association_collection.rb:525:in 'remove_records'
lib/active_record/associations/association_collection.rb:158:in 'block in transaction'


rails2 からの移行です。
0970nobodyさん2010/12/07(火) 22:23:10ID:???
>>969

lib/active_record/associations/has_many_association.rb は
relation.where(relation[@reflection.primary_key_name].eq(@owner.id).
なので、relation[@reflection.primary_key_name] が nil になっている。

set_primary_key がらみでなにか間違えてるんでは?
09719692010/12/07(火) 22:40:33ID:rDBHW00N
>>970
set_primary_keyとは

has_many :table_a,
:foreign_key=>"table_b_id",
:primary_key=>"id"
みたいなことでしょうか?

これは試し済みなんですよ。

もしかして相手側のbelongs_toの設定も必須になったんですかね。


0972nobodyさん2010/12/07(火) 22:57:48ID:???
相手側のbelongs_toは必要ない
移行ということなので、元のコードで 何か妙な上書きをしているのではと想像
0973nobodyさん2010/12/07(火) 23:04:05ID:???
とりあえず該当行近辺をデバッガでステップ実行するなり、デバッグプリントいれてみるなり。
09749692010/12/07(火) 23:08:10ID:???
皆様ありがとうございます。
validateなどコメントアウトしてみたり
もう少し頑張ってみます。
0975nobodyさん2010/12/08(水) 01:23:03ID:???
>>967
WindowsでRailsを本番環境で使おうとするバカがいるとは
そのバカがたくさんいないからunicornやPassengerもWindowsに対応されないのだろうけど・・・

"Rails windows production"で英語サイトをググったらいろいろでてくるが試してないので
試してぜひブログにでも書いてくれ

Rails as a Windows service on Ruby 1.9 - Matthew Closson's Random Thoughts
http://matthewclosson.posterous.com/rails-as-a-windows-service-on-ruby-19

Deploy Ruby on Rails on Windows 2008 Server and IIS 7.0 | www.10pines.com
http://www.10pines.com/content/deploy-ruby-rails-windows-2008-server-and-iis-70

Nginx + Thin => Rails Wiki
http://wiki.rubyonrails.org/deployment/nginx-thin


一番上を見ると1.9でもmongrelが動くように見えるんがRails 2系かなこれは
mongrelにするにせよ、必要に応じていくつも立ち上げておかないと並列にさばけないので注意
0976nobodyさん2010/12/08(水) 02:22:36ID:SUaj9gW4
http://www.oreilly.co.jp/books/9784873114002/
Railsデプロイ
7章 Windows環境でのデプロイ
7.1 サーバのセットアップ
7.1.1 Ruby on Railsのインストール
7.1.2 Subversionのインストール
7.1.3 Microsoft SQL Serverを利用するための設定
7.1.4 Windows版MySQL
0977nobodyさん2010/12/08(水) 02:23:59ID:SUaj9gW4
7.2 Mongrel
7.2.1 Mongrelのインストール
7.2.2 Mongrelの動作確認
7.2.3 Windowsサービスとしてのインストール
7.3 MongrelとPen
7.3.1 Penのセットアップ
7.3.2 Penを使った負荷分散
7.3.3 Windowsサービスとしてのインストール
7.4 Apache 2.2とMongrel
7.4.1 Apacheのインストール
7.4.2 負荷分散のための設定
7.4.3 Proxyディレクティブ
7.4.4 動作確認
7.4.5 Windowsサービスとしてのインストール
7.5 IISとの統合
7.5.1 ISAPI_Rewriteのインストール
7.5.2 アプリケーションへのリクエストの転送
7.5.3 動作確認
7.6 リバースプロキシとURL
7.6.1 reverse_proxy_fixプラグインのインストール
7.6.2 reverse_proxy_fixプラグインの利用法
7.7 複数のアプリケーションをホスティングする際の指針
7.7.1 IISとMongrelを使い、複数の小規模なアプリケーションを提供する
7.7.2 複数の大規模なアプリケーションを提供する
7.7.3 Windows上でのパフォーマンス 
0978nobodyさん2010/12/08(水) 07:12:43ID:???
>>964 >>968
キモイとか違和感とかって
見慣れてないって理由だけ?
バグを誘発しそうだから?
0979nobodyさん2010/12/08(水) 07:24:45ID:???
同じSymbolなのに書き方が違うからだろ
09809692010/12/08(水) 13:24:57ID:???
さらに調べたところ
establish_connection
でスキーマを変えているテーブルでのみ
発生することがわかりました。
これを
Activerecord::Base.establish_connection
にしたところ今度はスキーマを変えていないところで同じエラーが出ました。
何かアドバイス頂けないでしょうか?
0981nobodyさん2010/12/08(水) 15:19:56ID:???
動的にALTER TABLEでもしてるの?
3系のARにはreload_column_informationないんだっけ?


09826962010/12/08(水) 22:35:31ID:???
結局自己解決しました。
答えてくれた方ありがとうございました。

役に立ちそうなので参考までに解決方法書いておきます。

発生条件
establish_connectionで複数のスキーマにアクセスしている場合
has_manyのリレーションのところで >>696 のようにエラーが起きる。

対処方法
has_many_association.rbをRails.root/lib/ へコピーして
config/application.rb でrequireする。

has_many_association.rb 77行目
relation = Arel::Table.new(@reflection.table_name)

relation = Arel::Table.new(@reflection.table_name,Arel::Sql::Engine.new(self))
に書き換える。

has_belongs_to_many.にも同じことが起きていまして
has_belongs_to_many.rbも全く同じ修正で対応できました。
0983nobodyさん2010/12/08(水) 23:02:01ID:???
複数のスキーマというのはPostgreSQLとかのスキーマのことで、
別々のスキーマのデータにアクセスしてるってことなのか?
解決したんだからいいんだろうけど、よくわからんかった
0984nobodyさん2010/12/09(木) 12:15:35ID:m46cVwTq

セールスフォース、Rubyのクラウドプラットフォームを提供するHerokuを買収 - CNET Japan
http://japan.cnet.com/news/business/story/0,3800104746,20423885,00.htm
Rubyで書かれたアプリケーションの例としてBenioff氏は、TwitterやGroupon、オンラインビデオサービスのHuluなどを挙げ、
0985nobodyさん2010/12/09(木) 12:56:20ID:???
ほう
0986nobodyさん2010/12/09(木) 14:15:43ID:???
twitterののようにユーザー同士でフォローし合う機能を考える場合、
DB設計は以下のようになると思います。

usersテーブル
id
name

followsテーブル
id
user_id
follower_id

このように、同じテーブル(users)に対して二つのカラム(user_id, follower_id)で参照を持っている場合、
usersテーブルとfollowsテーブルの関係はどのように定義すべきでしょうか?

Userモデルで、has_many :follows
としてしまうと、follower_idがusersテーブルを見ていることがRailsに伝わらないと思うので
どのようにすればいいのか分かりません。
0987nobodyさん2010/12/09(木) 14:36:08ID:???
たぶん
class User < ActiveRecord::Base
has_many :follows
has_many :followers, :through => :follows, :foreign_key => :follower_id, :class_name => 'User'
end

class Follow < ActiveRecord::Base
belongs_to :user
belongs_to :follower, :foreign_key => :follower_id, :class_name => 'User'
end
でいいと思う。

follwer と follwee のどっちがどっちだか分からなくなってきた。
0988nobodyさん2010/12/09(木) 14:47:14ID:???
render :partial => @posts で posts/post が render されるのはどうして?
0989nobodyさん2010/12/09(木) 14:52:06ID:???
has_many :followsだけでいいような気もする。
そこが繋がっていれば必要な情報は漏れなく取れるでしょ。
0990nobodyさん2010/12/09(木) 15:37:52ID:???
>>988
@posts内の要素が何のインスタンスかを見て決めている。

0991nobodyさん2010/12/09(木) 21:32:52ID:???
GrouponもRailsだったんだな 知らんかった
09929862010/12/10(金) 17:00:12ID:???
>>987
返事が遅くなりすいません。
大変参考になりました。
ありがとうございました。
0993nobodyさん2010/12/10(金) 20:55:24ID:ojStFfQT
snow leopardでrailsに挑戦しているのですが、
railsでアプリケーションを作成すると、
utf-8ではなくshift-jisで全ファイルが作成されてしまいます。
どうすればutf-8で生成されるようになるでしょうか?
3.03でも2.3.8でも2.3.5でもshift-jisになってしまいます。
0994nobodyさん2010/12/10(金) 21:33:50ID:???
テキストエディタの設定を変更する。
0995nobodyさん2010/12/10(金) 22:00:27ID:ojStFfQT
>>994
あれ、もしかしてcoteditorにだまされてただけ?
感謝です
0996nobodyさん2010/12/10(金) 22:40:37ID:???
rails関係なくね・・・
0997nobodyさん2010/12/11(土) 01:58:25ID:???
そもそも作った時点ではASCII文字しか含んでないような気がする。
submitボタン名になんか記号が入ってたような気もするけど。
0998nobodyさん2010/12/11(土) 10:59:38ID:???
次スレ
【RoR】Ruby on Rails Part11
http://hibari.2ch.net/test/read.cgi/php/1292032736/

必要なもんがあったら貼っといて
0999nobodyさん2010/12/11(土) 14:44:38ID:???
埋め
2.3.5のアプリケーションをruby-1.9.2に対応させようとして、全部のファイルに
# encoding: utf-8
を入れたんだけど、もっと根本的なところで動かなかった orz
1000nobodyさん2010/12/11(土) 15:07:14ID:???
3.0に移行する方がずっと楽だと思うぞ
10011001Over 1000Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。