【RoR】Ruby on Rails Part13
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
2011/11/04(金) 17:06:24.32ID:???【Ruby】Ruby on Rails Part12
http://hibari.2ch.net/test/read.cgi/php/1311050686/
■参考サイト
<英語>
本家:http://rubyonrails.org
API document:http://api.rubyonrails.com/
開発者のblog:http://weblog.rubyonrails.org/
参考wiki:http://wiki.rubyonrails.org/rails
http://ruby-toolbox.com/
http://rubygems.org/
http://agilewebdevelopment.com/plugins/top_rated
<日本語>
Rails' wiki: http://wiki.fdiary.net/rails/
http://twitter.com/dhh
http://www.loudthinking.com/
0715nobodyさん
2012/01/22(日) 13:06:10.63ID:???それは感じた事ないな。
1.8系と1.9系は中身かなり違うが、書く分には対した違いではない。
遥か昔の1.4とかに比べても、そんなに変わってないと思う。1.6辺りからだと尚更。
MLに「こうしたら?」みたいな提案はよくあるけど、かなりの確率でmatzにリジェクトされてる。
昔はserializeしたデータにバージョン間で互換性がなくて実質使えなかったが、そういうのも聞かなくなった。
学生ノリはPHPとかスゴいよね。
関数名のアンダーバーをバージョン上がる毎に付けたり取ったり。
0716nobodyさん
2012/01/22(日) 13:13:09.46ID:???枯れてから使おうとか考えてる人には合わない。
仕事でもプロジェクト開始後にバージョン上げたりするし。
もちろんテストがあればこそできる話。
0717nobodyさん
2012/01/22(日) 13:24:18.85ID:sE8mL0/vhttp://yaml-mode.clouder.jp/
ここみてもみあたらないんですが・・・・
0718nobodyさん
2012/01/22(日) 13:25:30.57ID:sE8mL0/v0719nobodyさん
2012/01/22(日) 13:27:49.79ID:???新しい流れだなと。
0720nobodyさん
2012/01/22(日) 13:33:23.09ID:kpA61za+Rails1.2からRails3.1に移植したら大変かな?
0723nobodyさん
2012/01/22(日) 13:53:49.66ID:???無茶苦茶大変。
DBだけ残して新しく作る方が楽かも。
もしくはDBも新しくして、移行プログラム走らせるとか。
habtmみたいな、もう誰も使ってないのが使われてそう。
いずれにしろスキル要るし、1系から3系まで知ってる人はそんなに居ない。
0725nobodyさん
2012/01/22(日) 15:20:26.03ID:???0726720
2012/01/22(日) 16:54:14.92ID:???昨日1月20日に最新版Rails3.2出たんだな
>>725
ということで、Rails1.2からRails3.2への移植でおながいします
0727nobodyさん
2012/01/22(日) 17:12:54.33ID:???もうrake rails:updateとか無理だから、
新しく3.2でプロジェクト作る。
app/ とかを古い方から持ってくる。もしくは新しい方から、Gemfile や config周り持って行く。
routes 移植。
プラグイン周りとか移植。
最後のは移植しないで、例えば新しいプラグイン入れて、認証のencryptのとこだけ差し替えるとか。
どちらにせよ、茨の道。
0728nobodyさん
2012/01/22(日) 19:09:32.81ID:???0729nobodyさん
2012/01/22(日) 19:58:58.08ID:???具体的にどの辺りが大変だったのか参考までに聞きたい
Ajax周りは3系でガラッと変わったから面倒だったけど
0730nobodyさん
2012/01/22(日) 22:21:01.46ID:???・ブラウザでの通常のアクセスと
・JavaScriptとかでやってくるAPI的なアクセス
をコントローラ側で区別したい場合、どういうふうにするんでしょうか。
(a) Acceptヘッダーを見るのか、
(b) 独自にX-FooBarヘッダーをつけるのか
(c) *.jsonや*.xmlへのアクセスはAPIと見なすのか
よろしくお願いします。
0731nobodyさん
2012/01/22(日) 22:31:37.18ID:???0732nobodyさん
2012/01/22(日) 22:41:09.29ID:???(a)とか(b)だと使いまわしが面倒じゃない?
0733nobodyさん
2012/01/22(日) 23:19:32.46ID:???0734720
2012/01/23(月) 00:46:09.88ID:???どうもぉ〜
さっき本屋で立ち読みしてきたけど
Rails3.1の仕様もそ〜んなに変わってるようには見えなかった
でも、rhtml → erbまで違うとはね・・・
ま、多分、コンテンツになる部分だけ残して
あとは全部Rails3.2で作ることになりそう
インフル罹ったみたいなんで寝ますわ・・・
0735nobodyさん
2012/01/23(月) 01:30:53.30ID:???APIとブラウザの違いというか、返すデータの種類が違うなら
UAではなく求められているデータの種類で分けるべきでは
要求されてるものがブラウザがHTMLでAPIがjsonやXMLなら
:formatが違うから(そのようにするべきだろう)
単にrespond_toで分ければいいだけだろ
0736nobodyさん
2012/01/23(月) 02:34:29.77ID:???返すデータの種類を、拡張子で判断するよりも、Acceptヘッダーを見るほうが、本来は正しいあり方なんじゃないでしょうか。
/foo/bar/123
/foo/bar/123.html
/foo/bar/123.xml
/foo/bar/123.json
これらは、ほんらいは同じリソースのはずで、単に表現形式が違うだけにすぎない。
なのに別々のURLを割り当てるのは、おかしいように思います。
0737nobodyさん
2012/01/23(月) 08:24:44.75ID:???jsonが欲しければ.jsonで取るのは自然だと思うよ。
フォーマットが違うだけだし。
0738nobodyさん
2012/01/23(月) 08:30:21.94ID:???0739nobodyさん
2012/01/23(月) 09:52:44.98ID:X3Xu6cIF0740nobodyさん
2012/01/23(月) 10:47:27.27ID:???0741nobodyさん
2012/01/23(月) 20:43:45.49ID:???>フォーマットが違うだけだし。
だから違うURLを使うのはおかしいって話でしょ。
表現が違ってもリソースはひとつなんだから、本来ならURLもひとつにすべき。
0742nobodyさん
2012/01/23(月) 21:08:30.69ID:???そこまで考えまとまってるなら別に他がどうとか気にする必要ないよ。
0743nobodyさん
2012/01/24(火) 11:10:30.83ID:rjvP9n7Hプリコンパイルを一切使わない設定って出来ませんか?
CSSでクロスブラウザ対策してたりするとコンパイルこけるし
色々不便なので一切使わないようにしたいのですが
0744nobodyさん
2012/01/24(火) 14:23:23.89ID:???他は、 config/environments/production.rb
0745nobodyさん
2012/01/24(火) 15:01:11.36ID:???それだとhelperが使えないんだっけ?
0746nobodyさん
2012/01/24(火) 15:24:13.68ID:R2GYQ8Eehttp://railscasts.com/episodes/284-active-admin?language=ja&view=asciicast
0747nobodyさん
2012/01/24(火) 17:34:59.60ID:/isHqZPr0748nobodyさん
2012/01/24(火) 17:52:55.66ID:???0749nobodyさん
2012/01/24(火) 18:08:32.06ID:/isHqZPrそ、そんな
だめなんですか
特例でおしえていただきたいんですが
0750nobodyさん
2012/01/24(火) 18:13:03.92ID:/isHqZPr今ちいさなアプリケーションをrailsで作っているのですが、
formにメッセージを書き込む際に
あわせて書いた人のユーザーid を取得したいのですが、
どこに記述してよいかわかりません。
formの一部を抜粋するとこうなってます↓
<div class="field">
<%= f.label :message %><br />
<%= f.text_area :massage %>
</div>
お願いいたします
0751nobodyさん
2012/01/24(火) 18:14:55.52ID:???0752nobodyさん
2012/01/24(火) 18:16:14.91ID:???あとユーザIDってのは自分で入力させるの?
それともセッションかどっかに入ってるの?
0753nobodyさん
2012/01/24(火) 18:22:49.82ID:/isHqZPr分からなくてすごく困ってたんですw
ユーザーのidは書いているユーザー一人一人が持っていて、
<%= current_user.id %>
とかけば出力されます。
理想としてはメッセージを送ると自動でuser_idもDBに送られるようにしたいです。。
0754nobodyさん
2012/01/24(火) 18:54:33.22ID:???セーブした時にDBから割り当てられるもの。
もし、任意のid(初心者ならこのカラム名はやめた方が良い)を入力させるなら、
重複が無いかなどを調べないといけない。
0755nobodyさん
2012/01/24(火) 18:57:49.67ID:???コントローラで current_user.id とかやって、メッセージにセットする。
0756nobodyさん
2012/01/24(火) 19:16:19.62ID:/isHqZPrコントローラーでやるんですね、
ちょっといろいろためしてみます!
0757nobodyさん
2012/01/24(火) 19:31:55.63ID:/isHqZPrコントローラーのdef createところに
@message = Message.new(params[:Message])
params[:user_id] = current_user.id
とかいたのですが、うまく動かず…orz
0758nobodyさん
2012/01/24(火) 19:33:23.03ID:???message に渡しなよ。
@message.user_id = current_user.id
0759nobodyさん
2012/01/24(火) 19:38:15.04ID:/isHqZPrた、助かりました…!ありがとうございます
0760nobodyさん
2012/01/25(水) 01:09:22.67ID:???Railsでは /foo/123 には /foo/123.xml とか /foo/123.json とか :format がつけられるじゃん?
これって、コンテナリソースにはつけられるの?
つまり /foo/.xml とか /foo/.json とかはできるわけ?
それともコンテナリソースに対して xml や json を要求する場合はまた違う方法になるの?
0761nobodyさん
2012/01/25(水) 07:42:06.57ID:???0762nobodyさん
2012/01/25(水) 08:11:31.32ID:CoUa4Jns0763nobodyさん
2012/01/25(水) 10:11:00.50ID:???0764nobodyさん
2012/01/25(水) 11:16:46.09ID:???たとえばFooというテーブルのbarというフィールドの最大値を取得したいときは、以下のように書けば良いらしいのですが・・・
Foo.maximum('bar')
しかしながら、こう書くと『no method error』になるのです。
こちらの環境はRuby1.9.3、Rails3.1.3です。
maximumメソッドについては、以下のサイトで見つけました。
http://railsdoc.com/references/maximum
これによると3.1.0までは対応しているようですが、3.1.3にはもうmaximumはないということでしょうか?
0765nobodyさん
2012/01/25(水) 13:21:04.50ID:???そのフィールド無いんじゃないの?
0766nobodyさん
2012/01/25(水) 14:04:53.51ID:T66svPqtfriend
entry
があります。
user にはstatusがあって、statusがwarningの物は友人でなくとも無条件で表示したいです
entry.joins( :user => :friend ).("users.status = ? OR friends.post_user_id = ?" , "warning" , session[:user_id] )
これで取れるかと思ったのですが、users.status = ?がスルーされているのか
後のfriendの記事しか取れません
joinについて何か大きな勘違いをしているのかもしれませんorz
どうすればとれますか?
0767nobodyさん
2012/01/25(水) 14:19:09.42ID:???すみません、説明不足でした。
正確には、ある条件でデータを絞った後で、その中でのフィールドの最大値を取得したいということなのです。
まずFooというテーブルにbar、bazという2つのフィールドがあるとします。
イメージ的には、やりたい内容は以下のようなことです。
-------------------------------------
f = Foo.find_by_bar(○○○)
puts f.maximum('baz')
-------------------------------------
このやり方ですと、undefined method になります。
確かに、Foo.maximum('bar')という風に、絞り込んだものに対してではなく、直接最大値を取得するやり方ならうまく取れました。
絞り込んだものに対しては、maximumは使えないのでしょうか?
0768nobodyさん
2012/01/25(水) 14:54:10.77ID:???すみません、自己解決しました。
以下の方法で、条件を絞ったうえでの最大値を取得できました。
Foo.maximum(:bar, :conditions => {:baz => ○○○})
お騒がせしてすみませんでした;;
0769nobodyさん
2012/01/25(水) 20:32:05.37ID:CoUa4JnsところでFoo.find_by_barだとfはFooのインスタンス1つになるわけだが。
0770nobodyさん
2012/01/25(水) 21:57:29.42ID:???model = Model.new(param[:prefix])
model.save()
ってやり方は、悪意あるユーザがフォームにないパラメータを送ると
意図しない属性も変更されてしまうと思うのですが、そんなことないですか。
0771nobodyさん
2012/01/25(水) 22:04:45.35ID:???0772nobodyさん
2012/01/26(木) 05:29:31.01ID:WYeK+tHX例えば、ブログなんかで
最新のコメント
なーんてものがありますよね?
ああいう、頻繁に更新される可能性がある一箇所のせいで結構つらい思いをすることもあります
ログイン→ようこそ◯◯さん等もそうですが
いくつか考えたのですが、ページキャッシュしてしまい
そういった部分を全てAjax等で非同期読み込み
上でも出てたJavascriptでCookieを調べて割り振り
どちらも、Rails外での話なのでどうしても面倒くささを感じてしまいます……
0773nobodyさん
2012/01/26(木) 07:00:43.56ID:LIf9fd2Vところで、フラグメントキャッシュって一定時間で破棄って出来ない?
5分で破棄したいのだけど……
0774nobodyさん
2012/01/26(木) 11:45:32.46ID:???>mass assignできなくすれば大丈夫
ありがとうございます。でもこれってデフォルトでは作る側がいちいち設定する必要があるんですよね。
設定しなかった場合は、悪意あるユーザからの攻撃をいとも簡単に受けてしまう。
なんでデフォルトで禁止してないんですかね。
ttp://d.hatena.ne.jp/halflife/20081006/1223302382
> みたいにmass assignmentを使ってしまうと、entry[user_id]=1 とか適当なパラメータを送るだけで誰か他のユーザの投稿として Entry を更新することができたりするわけで。
> もちろん手を抜くなとか忘れるのが阿呆だとかはあるかもしれないけど、わたしのような初心者には結構危なく感じた。
>
> なんでRailsはデフォルトでmass assignment不可にしないんだろう?
> デフォルト不許可にしてしまうと、スキーマが変更されるたびに合わせて attr_accessible を修正しなきゃいけないとかDRYじゃねえよウゼーという感じなんだろうか。
0775nobodyさん
2012/01/26(木) 11:55:04.00ID:???@enty = current_user.entries.find(params[:id])
みたいに。
そう書いてないとダメだが。
0776nobodyさん
2012/01/26(木) 12:28:43.36ID:???最近ならそういった情報で更新されにくいものは
クライアントサイドのlocalStorageにいれてしまうってのもありだな
サーバーへアクセスされないからAJAXの負荷が無い
0777nobodyさん
2012/01/26(木) 16:01:35.70ID:???なんでそれで防げたことになるんですか?
今問題にしているのはcreateやupdateの話であって、findは関係ないような。
0778nobodyさん
2012/01/26(木) 16:30:47.72ID:???createでは
@entry.user_id = current_user.id
するだろ。
しなければもちろん外からセットされる。プロテクトしてなければ。
Railsに限った話ではなくて、そう作ればそうなるよという事。
0779nobodyさん
2012/01/26(木) 18:58:14.63ID:???もしかしてuser idのことだけ言ってますか?>>775で
>findした段階で大体防げるからなぁ。
と言っているのが不思議だったんですけど、user id *だけ* みればそうかもしれません。
しかし774などで指摘していることは任意のフィールドに当てはまることであり、
「findした段階で大体防げる」ようなものではないんじゃないですか。
0780nobodyさん
2012/01/26(木) 20:03:46.49ID:RmSk4BIq移行しようにも苦労しているのですが
おすすめのcsv読み込みツールってありますか?
0781nobodyさん
2012/01/27(金) 11:02:32.60ID:???> ありがとうございます。でもこれってデフォルトでは作る側がいちいち設定する必要があるんですよね。
> 設定しなかった場合は、悪意あるユーザからの攻撃をいとも簡単に受けてしまう。
これで終わりじゃん
0782nobodyさん
2012/01/27(金) 14:38:18.12ID:lH99fQFBhttp://weblog.rubyonrails.org/2012/1/26/rails-3-2-1-has-been-released
0783nobodyさん
2012/01/27(金) 18:06:51.09ID:???pages/:idの:idの部分を、ユーザの名前にしたくて困っています。
route.rbを
match "'pages/:username" => "pages#show", :via => :get, :path => :name
にしてrake route すると、
pages/usernameというルートしかできず…
方法ご存知な方いらっしゃいますか?
0784nobodyさん
2012/01/27(金) 22:26:17.58ID:50WK7S02def to_param; name; end
end
rails c
>> helper.controler = app
>> app.page_path(Page.create(:name => 'foobar'))
デフォルトのルーティングだと、名前であろうとパラメータ的にはあくまで
:idというパラメータとして渡されてくるので、:idだがnameとして扱うこと。
0785nobodyさん
2012/01/28(土) 05:39:03.61ID:???なぜわざわざ770みたいな脆弱な書き方を覚えてしまったのか
それは「横着な書き方」であって脆弱なのは当たり前だし、それでもRailsにはその脆弱さを防ぐ方法がいくつも備わってる
ちなみに775の言ってる事は俺も的外れだと思う
0786nobodyさん
2012/01/28(土) 10:17:16.60ID:???scaffoldが
foo = Foo.find(params[:id])
foo.update_attributes(params[:foo])
foo.save
みたいなコードを吐く以上、それがRailsの標準的なやり方と見なされてもしょうがない。
ところで
>それでもRailsにはその脆弱さを防ぐ方法がいくつも備わってる
って言ってるけど、具体的にはどんな方法があるの?
いくつもあるなんて知らなかった。
0788nobodyさん
2012/01/28(土) 20:25:27.97ID:kusQOV3zhttp://blog.digital-squad.net/article/106792109.html
Use attr_protected or we will hack you - Blog Articles - LessEverything
http://lesseverything.com/blog/archives/2008/03/11/use-attr_protected-or-we-will-hack-you/
0789nobodyさん
2012/01/28(土) 21:31:22.30ID:kusQOV3znewやらupdate_attributesやらでレコードの属性を「一括設定してもよい」属性を
指定するもの。逆に「一括設定を禁止」するattr_protectedとペアで考える。
http://read2ch.com/r/php/1292032736/#t508
0790nobodyさん
2012/01/28(土) 21:47:54.91ID:kusQOV3zhttp://www.oiax.jp/rails/zakkan/assign_attributes.html
update_attributes
http://blog.livedoor.jp/sasata299/archives/51485638.html
0791nobodyさん
2012/01/29(日) 14:01:57.04ID:???0792nobodyさん
2012/01/31(火) 07:44:07.71ID:???0793nobodyさん
2012/01/31(火) 11:18:03.40ID:???0795nobodyさん
2012/01/31(火) 21:42:32.22ID:J/mA32Fb0796nobodyさん
2012/01/31(火) 22:06:34.42ID:Nhw8SxC0we ended up shipping with just about 2,000 lines of code.
http://37signals.com/svn/posts/3094-code-statistics-for-basecamp-next
37signalsのBasecampは米国企業上位500社の321社が利用中 ? SEO Japan
http://www.seojapan.com/blog/37signals-and-fortune500
Ruby on Rails開発者のDavid Heinemeier Hanssonによる「起業の学校」講演!
http://toshio.typepad.com/b3_annex/2008/04/ruby-on-railsda.html
2000人の顧客が月40ドルを12か月払えば、100万ドルになる。
0797nobodyさん
2012/01/31(火) 22:10:27.23ID:Nhw8SxC0Getting Real by 37signals
http://gettingreal.37signals.com/GR_jpn.php
0798nobodyさん
2012/01/31(火) 23:23:30.79ID:Nhw8SxC0http://www.sponichi.co.jp/gravure/special/ir_2010/ir_ikezawaasuka/KPhotoNormal20100731176_p.html
0799nobodyさん
2012/02/01(水) 09:50:30.32ID:???Test.find(1).each do |key, value|
#処理
end
このような処理はできないんでしょうか?
0800nobodyさん
2012/02/01(水) 10:24:09.07ID:???attributesメソッドでハッシュが返ってきますね。
0801nobodyさん
2012/02/01(水) 21:36:14.66ID:MwDJMjTghttp://www.ideaxidea.com/archives/2012/02/twitter_bootstrap_v2.html
http://twitter.github.com/bootstrap/index.html
https://github.com/twitter/bootstrap/
0803nobodyさん
2012/02/02(木) 11:31:58.44ID:ppveFy64調べたところ
データベースアクセス周りが7割くらい占めてました
かるく調べたんですが
めむきゃっしゆ?
find_by_sql
インデックスをはる
あたりが王道のようですが、これでどのくらいかわるものですか?
0804nobodyさん
2012/02/02(木) 13:06:40.10ID:???データ量によっては10倍以上効く
0805nobodyさん
2012/02/02(木) 13:07:29.66ID:???0806nobodyさん
2012/02/02(木) 13:25:21.92ID:nGOtgXLdありがとうございます
find_byでしょっちゅう検索するものに貼ってみます
snsで、データはユーザー数が500くらい、コメント数が2万くらいです
>>804
確かにそうですよね……
うーんと、それじゃあ
twitterのようなリアルタイム性があるページキャッシュの効かないサイトを運営した場合
どのようなアプローチが考えられますか?
毎読み込みごとに結構な数のクエリが発行されるでしょうし、人数もとても多く、拡散などでリアルたいむに個々のつぶやきの情報もかわる
似たような機能があり、そこがボトルネックとなっております
例えば、ヘッダーフッターサイドバーと言った外枠だけをページキャッシュして、jqueryで内側を非同期読み込みー
などという方法で、とりあえずレスポンス速度のみは劇的に改善できるとも考えたのですが
すごくクールじゃないですよねー……
0807nobodyさん
2012/02/02(木) 14:24:52.03ID:???github なんかそんな感じじゃん
0808nobodyさん
2012/02/02(木) 15:27:49.48ID:???メンテナの間で同意とれてりゃだけど。
0809nobodyさん
2012/02/02(木) 17:34:08.38ID:???それ以前にパンクする規模じゃない気がするなあ
mysqlあたりのメモリ設定とかも見直したら?
0810nobodyさん
2012/02/02(木) 19:03:48.10ID:79jXgfNj言われてみれば……!
>>808
ですよねー……
中でなにやってようが早ければユーザーさんはかまいやしないですよね
>>809
なんとこんなものが……
Mysqlのメモリをデフォルトの16MBから500MB(搭載は4GB)まで増やしたらそれだけでかなり快適になりました
ありがとうございました
0811nobodyさん
2012/02/02(木) 19:26:54.19ID:???それ、スモールサーバの設定だったんじゃないかな
MySQLのチューニングは探せばいろんなページに設定例あるし本も出てるよ
0812nobodyさん
2012/02/03(金) 12:11:30.89ID:NPWpUqidRails2では
Actioncontroller::Base.page_cache_directory = "/var/www/hoge/public/page_cache" こんな感じ?
だったようですが、3だとうまくいきません。
やりたいことは、「一定時間でのキャッシュの削除を簡単にする」です。
10分毎にページキャッシュをクリーンしたいので、cron で rm * で一括で消したいと考えております
0813nobodyさん
2012/02/03(金) 17:24:14.90ID:hJMEWrmo勉強をかねて掲示板を作成しようと思ったのですが、
resourcesのネストでうまく行かなくなってしまいました
rails3.1.3
ruby1.9.2
スレッドをtopic,レスをpostという名前でモデルをscaffoldで作って、モデルで一対多の関係を持たせて
routes.rbに
resources :topics do
resources :posts
end
の様なルーティングを作り、post周りのビューのpathヘルパーをtopic_post_pathの様に変えました
http://localhost:3000/topics/1/posts へのアクセスはうまく行くのですが
http://localhost:3000/topics/1/posts/new へのアクセスは
Routing Error No route matches {:controller=>"posts", :format=>nil}
の様にエラーが出てしまいます
どこをどの様に変更したらhttp://localhost:3000/topics/1/posts/new でpostを作成できるでしょうか?
どなたか回答していただけたらうれしいです よろしくお願いします
■ このスレッドは過去ログ倉庫に格納されています