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

【RoR】Ruby on Rails Part11

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん2010/12/11(土) 10:58:56ID:???
■前
【Ruby】Ruby on Rails Part10
http://hibari.2ch.net/test/read.cgi/php/1282991262/

■参考サイト
<英語>
本家:http://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/
0204nobodyさん2011/01/17(月) 23:48:34ID:???
普通に使ってるが。
mysql2はdevkitが必要だと思うが入れたのか?
前にも書いたし勝手に解決してないことにするなよ。
0205nobodyさん2011/01/18(火) 19:11:55ID:???
AR で human sort って出来ますか?
データに関してはRDBに丸投げですか?
0206nobodyさん2011/01/20(木) 01:29:44ID:???
RoRはぶっちゃけもう終わったと思います。
0207nobodyさん2011/01/20(木) 02:19:35ID:???
始まってもいなかった
0208nobodyさん2011/01/20(木) 17:05:05ID:???
PHPフレームワークを使う → やっぱり優秀ではなかった → RoRを使う → やっぱりダメだった

→ Tomcat+javaにしてみた → これが正解だと思った
0209nobodyさん2011/01/20(木) 17:16:00ID:SSKhJITE
JavaからRubyへ ―マネージャのための実践移行ガイド
http://www.amazon.co.jp/gp/product/4873113202

0210nobodyさん2011/01/20(木) 17:16:13ID:???
Tomcatはフレームワークではなく、ソフトウェアの名前。
これに相当するのはRailsで言えばPassenger。

多少でも分かっていれば、こんなバカな間違いはしない。
またいつも荒らしてる勉強会の出席者?
0211nobodyさん2011/01/20(木) 17:30:50ID:???
ひょっとこしてアスペ?
0212nobodyさん2011/01/20(木) 17:57:49ID:???
そういえばぽろっとバレたやつがいたな
0213nobodyさん2011/01/21(金) 04:07:57ID:???
最近のJavaのフレームワークってどんな感じになってるの?
0214nobodyさん2011/01/21(金) 07:36:26ID:???
ここはrailsスレだよ、あんぽんたん
0215nobodyさん2011/01/21(金) 08:33:12ID:???
JRuby on Rails
0216nobodyさん2011/01/21(金) 12:46:05ID:???
それが次の勉強会のテーマ?
0217nobodyさん2011/01/22(土) 03:04:07ID:a6Nv7f5X
http://status.heroku.com.zurukko.jp/incident/115
0218nobodyさん2011/01/23(日) 12:04:05ID:???
ここはSQLチューングは上級者テクニックだと思ってる
低脳ばかりだからしょうがないよ^^

たとえばMySQLならexplainで実行計画を確認するのは
初心者が一番初めに覚えるべき基本だろ。

基本をはずしたヤツが開発したWebアプリはサイトがヒットした瞬間、
「トップページも表示されません」「今日は売り上げがゼロでした」という
間抜けなことになる(笑

こんなこと言っても、ここの連中には馬の耳に念仏だろうけどね(笑
まぁ 生まれつき低脳だから仕方ない^^

なんていうか、向上心が無い。知識が狭くて浅いが、本人には自覚が無いのでたちが悪い。
0219nobodyさん2011/01/23(日) 12:54:43ID:???
いきなりどうした
ママに怒られたか
0220nobodyさん2011/01/23(日) 20:39:24ID:???
どんな高級言語やフレームワークを使おうとも、その裏でどういうロジックで動いているかを
考えるのは当たり前のこと
Rails で間抜けな SQL を発行している人間は Java を使っても間抜けなコーディングになるだけ
0221nobodyさん2011/01/23(日) 21:03:33ID:???
SQL で間抜けな filesort を発行している人間は COBL を使っても間抜けなコーディングになるだけ
0222nobodyさん2011/01/24(月) 00:32:29ID:???
create_table :hoges do |t|
t.text :data
end

class Hoge < ActiveRecord::Base
def hoge
puts "*A* data = #{data.inspect}"
data = "fuga" if false
puts "*B* data = #{data.inspect}"
end
end

Hoge.create!(:data => "hoge")

で Hoge.first.hoge すると
*A* data = "hoge"
*B* data = nil
となるのは、なぜ? 両方 "hoge" になるべきだと思うんだけど。
Rails 3.0.3 + Ruby 1.9.0p0 でも Rails 2.3.5 + Ruby 1.8.7 でも同様。
0223nobodyさん2011/01/24(月) 00:57:19ID:???
君が同名のローカル変数を作ってしまったからだ
Rails関係ないから初心者スレに行くといい
0224nobodyさん2011/01/24(月) 04:21:21ID:???
あう、if false な状況でもローカル変数が作られるとはまったく想像もしてなかった。
0225nobodyさん2011/01/24(月) 08:21:35ID:???
代入メソッドはself使えってMatzがいつも言ってるだろ
0226nobodyさん2011/01/24(月) 16:22:48ID:???
require 'rubygems'
require 'active_support/all'
module M
def self.included(base)
base.class_eval do
class_inheritable_accessor :a
self.a = 1
end
end
end
p Class.new.send(:include, M).new.a # => 1
p Class.new{include M}.new.a # => nil ← !?
0227nobodyさん2011/01/24(月) 16:58:51ID:???

  初 心 者 ス レ に い け
0228nobodyさん2011/01/24(月) 17:10:48ID:???
p Class.new.instance_eval{include M}.new.a # => 1
0229nobodyさん2011/01/24(月) 17:19:15ID:???
>>226
1.9 だと 1 になるな
0230nobodyさん2011/01/25(火) 15:35:25ID:???
Memcachedベースのsesson_store を利用している場合に
session_id から session を復元する方法はありませんか?
(Rails3+Dalli です)

ActiveRecordベースの場合、以下のようにして復元できたのですが。。。
session = ActiveRecord::SessionStore::Session.find_by_session_id(session_id)
0231nobodyさん2011/01/25(火) 17:12:30ID:yu47GaxV
>>230

うちはまだ Dali でも Rails3 でもないけど、cache をストアに使っている
MemCache クラスのインスタンスだとすれば、cache["session:#{session_id}"]
で取れてる。
memcache上のキー自体は #{namespace}:session:#{session_id} になっている。
02322302011/01/25(火) 20:00:15ID:???
>>231
返答ありがとうございます。
以下のやり方でいけました。

session = Dalli::Client.new('localhost:11211').get("rack:session:#{session_id]}")

デシリアライズまで透過的にやってくれるのはありがたいのですが、
memcacheのクライアントをリクエストのたびに毎回生成してしまうやり方なので、
負荷的によろしくなさそうなのが何とも。何か良い方法はないものかな。

Rails.cache.fetch(session_id) とかで取れれば、楽なんですがねぇ。
0233nobodyさん2011/01/25(火) 20:44:25ID:F3Uu324/
ActionController::Base.session_options[:cache] あたりに
入ってなかった?
02342302011/01/25(火) 22:13:27ID:???
2.xまでは

CACHE = MemCache.new memcache_options
CACHE.servers = 'localhost:11211'
ActionController::Base.session_options[:expires] = 1800
ActionController::Base.session_options[:cache] = CACHE

という感じで、memcacheクライアントの実態が入っていたようです。
3.xからは、ActionController::Base.session_options が request.session_optionsに移動して
:cache もなくなってしまった感じっぽいです(Rails.cache?)。
0235nobodyさん2011/01/27(木) 02:20:28ID:8vsS5446
http://b.hatena.ne.jp/entry/japan.cnet.com/news/business/20425484/
【ネット/料理】「年内にクックパッド抜く」 楽天レシピ、急成長
http://toki.2ch.net/test/read.cgi/wildplus/1296032687/
0236akiyan2011/01/28(金) 23:35:53ID:???
cakePHPにできないことは無いし
0237nobodyさん2011/01/29(土) 02:50:04ID:ioBbPtI8
結局クックパッドは楽天レシピに抜かれる弱肉強食WEB - invizi
http://invizi.net/subject:58

[クックパッド][cookpad][ruby][rails][楽天]
0238nobodyさん2011/01/29(土) 02:51:19ID:ioBbPtI8
メディアの存続にとって必要なのは「金」か「カルチャー」か - invizi
http://invizi.net/subject:60
0239nobodyさん2011/01/29(土) 13:25:51ID:???
RailsでMySQLを使っているときのトランザクションについて教えてください。

Book.transaction do
処理1
処理2
end

このようなコードを書いた場合、
処理1と処理2がいずれも実行されるか、いずれも実行されないか
を保障するというのは理解できるのですが、
処理1と処理2の間に別プロセスがBookテーブルに変更を加えてしまうことはあり得ますか?

具体的には、Bookテーブルにcountというカラムがありまして
この本を保持する人の人数を保持しています。
ユーザーからのあるアクションによって、複数のbookのcountを更新する必要があるのですが、
Aさんが更新中にBさんが更新してしまうと整合性が取れなくなってしまう問題に当たっています。

この更新処理を上のコードのトランザクションで囲めば解決されるのでしょうか?
0240nobodyさん2011/01/29(土) 13:35:21ID:???
質問させてください。携帯サイトの開発をしています
rails3+jpmobile環境なのですが、jpmobileのconfig.jpmobile.mobile_filter をオンにした状態化で
swfファイルを send_file or send_data すると jpmobile のフィルタの影響で不正な swf ファイルが送信されてしまいます
なんとか、mobile_filter をオンにしつつ、正常な swf ファイルを送信する方法はないでしょうか?
0241nobodyさん2011/01/29(土) 14:10:00ID:???
railsの設定ではなくて、MySQLのトランザクションレベルによる。

ttp://dev.mysql.com/doc/refman/5.1/ja/innodb-transaction-isolation.html

InnoDB使ってるだろうから、デフォルトの REPEATABLE READ だと思われる。

結論からいうと、Bookテーブルは別のプロセスから変更を受けうる。
ただし、Bookテーブル内のロックされた行は
別プロセスから変更を受けないことが保証される。
テーブルレベルのロックと行レベルのロックの違いを汁。

Aさんが行1,2を更新している間は、Bさんは行1,2のコミットが終わるまでは、
UPDATEやDELETEはもちろん、SELECT文での読み取りも不可能になる。
ただし、Aさんがそのトランザクション中に更新しないとMySQLが判断した
行3なんかがあたとしたら、Bさんは行3に関しては読み取り・更新が出来る。

書き方が変だと、トランザクションはったつもりでも
レースコンディションが起こるので注意。
ttp://d.hatena.ne.jp/LukeSilvia/20100130/p1
0242nobodyさん2011/01/29(土) 14:15:42ID:???
>>239
>具体的には・・・
を見ると、行ロックでググると良いと思う
02432402011/01/29(土) 14:17:43ID:???
一応?自己解決しました。

lib/jpmobile/mobile/docomo.rb 
をいじって、SJISへのコンバート処理をコメントアウトし、必ずUTF8を使うようにしたところ
問題が起こらなくなりました。

あまりよくない方法の気もするので、もっと良い解決策があったらご教授お願いします m( _ _ )m
0244nobodyさん2011/01/29(土) 15:13:12ID:XpJ1rxWJ
>>240
ソース見て見たけど、mobile_filterってonlyとかexceptオプション認識しないのな…
swfを返すとこだけ別コントローラにして、mobile_filterをそれ以外に書く、
で回避できぬ?

02452392011/01/29(土) 16:47:50ID:???
>>241
>>242

分かり易い説明ありがとうございます。
トランザクションとロックの関係が分かっていなかったので混乱していました。
トランザクション中に更新されうる行をMySQLが判断してロックをかけてくれる、
というところでスッキリしました。

ただ、以下の点については

>Aさんが行1,2を更新している間は、Bさんは行1,2のコミットが終わるまでは、
>UPDATEやDELETEはもちろん、SELECT文での読み取りも不可能になる。

SELECT文はロックをかけないのでAさんが更新中でもBさんはSELECT可能なのではないですか?
もしSELECTも不可能になるのであれば何も心配無いのですが、
SELECTが可能なのであればBさんの更新でAさんの更新が消えてしまいます。

見当違いなことを言っていたらすいません。
0246nobodyさん2011/01/29(土) 17:08:16ID:???
> トランザクション中に更新されうる行をMySQLが判断してロックをかけてくれる、

何を言いたいのか意味不だがトランザクションで複数のSQL文をまとめたところでロックをかけるのはSQL単体レベルってのは理解してる?
0247nobodyさん2011/01/29(土) 17:43:34ID:???
>>245
BさんがSELECT実行するのは可能だが
コミット前のAさんの変更分をBさんがSELECTで読み取ることは出来ない
って意味だろ
0248nobodyさん2011/01/29(土) 18:09:46ID:???
トランザクション中に別のプロセスが対象データを更新できるのなら、
それはトランザクションとは言わない。
0249nobodyさん2011/01/30(日) 00:50:26ID:YHMQGBGn
大抵のフレームワークには、プラグインの機能が備わっています。
このプラグインを活用することで、高速開発が可能です。
http://1-byte.jp/2011/01/06/open_trivist/
0250nobodyさん2011/01/30(日) 09:12:32ID:???
NetBeans IDE 7.0からRuby on Railsのサポートを廃止
http://journal.mycom.co.jp/news/2011/01/28/061/index.html

使ってるんだが、Oracle・・・
0251akiyan2011/01/30(日) 12:16:54ID:???
残念だよね
radrails久しぶりに使ってみよう
0252nobodyさん2011/01/30(日) 16:03:53ID:???
aptanaの方も開発スピードが遅すぎてあやしいのだが

radrailsの技術者がaptanaに引き抜かれたけど、
IDEの開発じゃなくて別の仕事に割り当てられてるって
以前どこかのサイトで見たぞ。
0253nobodyさん2011/01/30(日) 21:04:11ID:???
javaならともかく、rubyでeclipseのようなIDEを使う必要性を感じないのだが。
0254nobodyさん2011/01/30(日) 23:13:14ID:APKrEmun
まー、だからこそOracleが手を引いたんだろうね。
0255nobodyさん2011/01/31(月) 03:41:59ID:???
また使ってもないやつの妄想意見かよ
0256nobodyさん2011/01/31(月) 08:46:15ID:Rhe/MGsR
一次ソースくらい見ればいいのに
http://netbeans.org/community/news/show/1507.html

based on existing low usage trends we are unable to justify the continued
allocation of resources to support the feature.
0257nobodyさん2011/01/31(月) 09:05:55ID:???
なんか勘違いしてないか?
0258nobodyさん2011/01/31(月) 10:58:50ID:???
<%= link_to @post.title @post %>
これを
<%= link_to @post %>
と書けるヘルパーありませんか?
0259nobodyさん2011/01/31(月) 11:43:09ID:???
これはひどい。自分で作っても1分で完成だろ
0260nobodyさん2011/01/31(月) 13:50:56ID:???
#model
def link_text
self[:title] || self[:name]
end

#helper
def link(obj)
link_to obj.link_text, obj
end
0261nobodyさん2011/02/01(火) 00:24:55ID:yP2kD8Vl
railsとなんらかのDBで在庫管理をしたいんだけど
参考になりそうなサンプルないでしょうか
0262nobodyさん2011/02/01(火) 11:25:53ID:lrZ+99HC

Syntax Highlight
http://ruby-toolbox.com/categories/syntax_highlighting.html

CRM Apps
http://ruby-toolbox.com/categories/crm_apps.html

E-Commerce
http://ruby-toolbox.com/categories/e_commerce.html
0263nobodyさん2011/02/01(火) 18:28:26ID:???
Rails3のscopeに関する質問です。

以下のようにクラスメソッドとして、scopeを呼び出すと意図した通りに動きます。

scope male, where(:sex => 1)
User.male

しかし、インスタンスメソッドとして呼び出すと、
そんなメソッドは無い、と怒られます。

u = User.all
u.all.male
NoMethodError: undefined method `male' for #<User:0xa41ae74>


scopeをインスタンスメソッドとして呼び出す方法はないのでしょうか?
0264nobodyさん2011/02/01(火) 18:53:45ID:gX/bMisP
allはスコープ連鎖(ActiveRecord::Relation)を返さないので、付けるなら最後。
0265nobodyさん2011/02/01(火) 20:27:21ID:???
スコープをインスタンスメソッドとしての意味がわからねえ。。。
ちなみにallが返すのはArrayな。
0266nobodyさん2011/02/01(火) 21:51:18ID:???
絞り込み条件をIF文の結果次第で追加するとかなら
十分意味があると思う
0267nobodyさん2011/02/01(火) 22:20:26ID:???
>>263 じゃないけど、上記のような単純なケースだと述語として使い回したいと
思うことはある。 User#male? とか別途用意するの面倒。
0268nobodyさん2011/02/01(火) 22:27:21ID:ikyFKs3w
>>263
u はUserのインスタンスの配列であってUserのインスタンスではないぞ。
0269nobodyさん2011/02/01(火) 22:31:18ID:???
User.where('18 > ?', :age).male

普通にできるけど^^;
0270nobodyさん2011/02/01(火) 22:35:51ID:ikyFKs3w
そりゃ、問題は all だもの。
0271nobodyさん2011/02/02(水) 02:35:39ID:???
こんにちは失礼します。
Railsを1週間ほど前から使い始めました。
初級者本を読んで何とか自分でTODOアプリ的なものを作れるようになりました。
0272nobodyさん2011/02/02(水) 05:41:57ID:???
公開しる
0273nobodyさん2011/02/02(水) 20:30:41ID:???
亀レスだけど
>>256 は
able と unableを見間違えたのか?
0274nobodyさん2011/02/02(水) 22:16:10ID:QKkorMRK
>>273
??
0275nobodyさん2011/02/03(木) 08:46:30ID:???
>>269
> User.where('18 > ?', :age).male
>
> 普通にできるけど^^;
クラスメソッドとインスタンスメソッドを
混同しているようだ。
0276nobodyさん2011/02/03(木) 20:50:46ID:???
269は266へのレスだろう
0277nobodyさん2011/02/03(木) 21:36:49ID:???
どう考えても違うだろ
0278nobodyさん2011/02/04(金) 02:35:49ID:???
TALみたいなテンプレートエンジンってないですか?
デザイナーさんとの協業が大変すぎるので
いい方法を探してます。

0279nobodyさん2011/02/04(金) 08:46:49ID:2Ew9ESxw
kwartz とか amrita (amrita2) とかかなぁ。
Rails から使えるようにする方法はあるのかわからん。
0280nobodyさん2011/02/04(金) 17:22:59ID:???
rubyよりの質問なのですが、Enumerable の map と each は、
パフォーマンスに違いがあったりするのでしょうか。

内部的に、mapの方は並列化して処理できるから早いとか。
0281nobodyさん2011/02/04(金) 19:49:15ID:???
>>279
ありがとう
ちょっと試してみる
0282nobodyさん2011/02/04(金) 20:17:28ID:???
Enumerable のメソッドは全部 each を利用しています
つまり同じです
0283nobodyさん2011/02/05(土) 21:02:57ID:DexYYH6t
ruby1.9.2, rails3.0.3, Passenger3.0.2です
public/image/***.jpgに画像を置いてるんですがファイルが存在しないときroutesを通さず404を返すにはどうすればいいですか?
0284nobodyさん2011/02/05(土) 21:49:10ID:GPb9IKNi
mod_rewrite って public/.htaccess に書いても効くんだっけ?

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ¥.jpg$ [R=404]

みたいな(未確認)
0285nobodyさん2011/02/06(日) 04:04:42ID:???
AllowOverride が書いてあれば逝けるんじゃね?
0286nobodyさん2011/02/06(日) 09:42:56ID:???
public の下は apache が直接扱うように設定するんじゃないの?
0287nobodyさん2011/02/06(日) 12:25:14ID:???
railsのmigrationってsvnと相性悪そうだけどどうなの?
特に複数人でのプロジェクト
0288nobodyさん2011/02/06(日) 12:54:13ID:???
意味がわからない
0289nobodyさん2011/02/06(日) 18:21:00ID:???
>>287
もう少し具体的に
0290nobodyさん2011/02/06(日) 18:38:48ID:???
いやお前らが読み取れよ。
0291nobodyさん2011/02/06(日) 19:59:39ID:???
>>283
これmongrelの場合どうすればいいの?
0292nobodyさん2011/02/06(日) 21:29:00ID:???
バージョン管理されてるファイル群をさらに別機能でバージョン管理することになって
マージがめんどくさくなりそうな気がする
0293nobodyさん2011/02/06(日) 21:44:27ID:???
db:migrate コマンド
でググったら幸せになれるかもだよ
0294nobodyさん2011/02/06(日) 21:45:23ID:???
さすがに、一つのマイグレーションファイルを複数人で触るとかやんないよね?
0295nobodyさん2011/02/06(日) 21:59:05ID:???
今会社で5人ぐらいでRailsアプリを開発してるけど、特に困ったことは無いな。
DB変更する時は突然マイグレーションファイルアップするのではなく、口頭でメンバーに伝えて情報共有する。
既存のマイグレーションファイルはいじらない。
rollbackでちゃんと元に戻るように記述しておく。
このぐらいを気をつけていれば何も問題ない。
0296akiyan2011/02/07(月) 02:06:53ID:???
>>295
それって結局migrateとバージョン管理に頼らず口頭で管理してるってことになりませんか
5人規模のプロジェクトならいいけれど中華人民共和国の人口は13億ですよ 口頭で管理したら破綻しませんか
0297nobodyさん2011/02/07(月) 02:14:37ID:QPqcOi6P
>>296
なんでそうなるの?
議論を経て仕様変更についての知識を共有した上で、
変更自体はマイグレーションファイルを作ってやってるわけでしょ?
0298nobodyさん2011/02/07(月) 02:38:22ID:???
モデルクラスのメソッド内からselfを付けなくてもセッターにアクセス出来てしまうのですが、
これはRailsが裏で何かやってるんですかね?


membersテーブルにnameというカラムがあるとします。

class Member < ActiveRecord::Base
def mthd
name = 'Suzuki'
end

mthdを呼んでも何故かnameはローカル変数ではなくセッターとして認識される。
0299nobodyさん2011/02/07(月) 15:58:01ID:???
>>298
裏でなにかやってるとか人聞きが悪いじゃないですか
そういうのやめてもらえますか?
0300nobodyさん2011/02/07(月) 19:14:00ID:???
bundle install をすると、手を加えていたpluginが初期の状態に戻ってしまいます。
これを防ぐ方法はないのでしょうか。
0301nobodyさん2011/02/07(月) 20:26:45ID:???
まず、pluginを直接変更するそのやり方を変えた方がいいと思うが
0302nobodyさん2011/02/07(月) 21:37:50ID:???
オープンクラスで変更するにしても、bundle installの影響で
pluginのバージョンが変わってしまうと結局 危ないので freeze する方法が知りたいのです。
0303nobodyさん2011/02/07(月) 21:59:32ID:QPqcOi6P
>>300
自分とこにgitリポジトリ作って、それを参照する。
■ このスレッドは過去ログ倉庫に格納されています