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

【Ruby】Ruby on Rails Part6

レス数が900を超えています。1000を超えると表示できなくなるよ。
0001nobodyさん2008/10/24(金) 17:46:53ID:???
■前 Ruby on Rails のスレ が
http://pc11.2ch.net/test/read.cgi/php/1207425569/

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

■参考スレ
Rubyについて Part 33
http://pc11.2ch.net/test/read.cgi/tech/1223709050/
Ruby 初心者スレッド Part 22
http://pc11.2ch.net/test/read.cgi/tech/1221467121/
0839nobodyさん2009/04/03(金) 23:13:07ID:???
「scalaでも使え」と言ってみたら?
0840nobodyさん2009/04/04(土) 01:56:19ID:???
>>838
トップから画像数枚眺めてみたけど別に重くはなかったぞ
0841nobodyさん2009/04/04(土) 02:22:46ID:???
最近こういう画像投稿サイト多いね
しかもどこもそこそこ盛況なようで結構なことですな
うちの会社の自社サービスなんて2年たって会員数2桁ですよwww
マネージャは冷や飯くらったらしい
0842nobodyさん2009/04/04(土) 03:25:38ID:???
アクティブユーザーは2人くらい?
0843nobodyさん2009/04/04(土) 08:24:37ID:???
>>841
どうやったらそんな奇跡的な会員数になるのか興味あるな。
0844nobodyさん2009/04/04(土) 15:01:46ID:???
会員全員社員
08458262009/04/04(土) 15:52:57ID:ZJouk0fd?2BP(0)
>>827
>>828
ありがとうございます。どちらでもできました。

また、疑問ができてしまたのですが、
arr2 = arr.collect(&:test)
の:testの前の&はなんでしょうか??
http://www.ruby-lang.org/ja/man/html/_A5AFA5E9A5B9A1BFA5E1A5BDA5C3A5C9A4CEC4EAB5C1.html#a.a5.e1.a5.bd.a5.c3.a5.c9.c4.ea.b5.c1
ここらへん見るとproc辺りが関係してるのかと思うのですが、そもそもブロックが定義されてない??
railsっていうよりrubyの質問っぽいですが、教えていただけると幸いです><
0846nobodyさん2009/04/04(土) 16:08:10ID:???
つーか自社サービスにすればおkって見通しがそもそも甘い。
0847nobodyさん2009/04/04(土) 17:06:49ID:???
&は、最後の引数に対して使うもので、指定したものをブロックとしてメソッドに引き渡す。
そのときどういうブロックに変換されるかを、引数(今回はSymbolである:test)の#to_proc
メソッドで定義できる。

http://www.ruby-lang.org/ja/man/html/_A5E1A5BDA5C3A5C9B8C6A4D3BDD0A4B7.html#a.a5.d6.a5.ed.a5.c3.a5.af.c9.d5.a4.ad.a5.e1.a5.bd.a5.c3.a5.c9.b8.c6.a4.d3.bd.d0.a4.b7
08488452009/04/04(土) 17:41:25ID:ZJouk0fd?2BP(0)
>>847
なるほど〜。ありがとうございます!
複雑ですがやっぱり便利ですねruby・・
08498362009/04/04(土) 22:55:38ID:???
>>837
ありがとうございます。とりあえず、モデルに定義することにします。
0850nobodyさん2009/04/05(日) 00:59:52ID:???
Railsで Access のような業務アプリを作るとき,帳票印刷はどうしてますか?
あと,ショートカットキーで入力フォームを行き来したりするのはHTMLだと難しいと思うんですが,
そういうインターフェース面はフォームのボタンをマウスでクリックしてもらうしかないのでしょうか?
0851nobodyさん2009/04/05(日) 02:09:32ID:???
そういうのはクライアントサイドだから言語はあまり関係がないぞ。
0852nobodyさん2009/04/05(日) 03:14:38ID:???
まずウェブベースで出来なきゃ他の方法検討するしか無い。
つーかRoR関係ないだろ。

http://pc11.2ch.net/test/read.cgi/php/1025346267/
Webアプリで帳票印刷
0853nobodyさん2009/04/05(日) 20:17:58ID:???
Rails直接関係ないのですが、関連性があると思いここでおききします。
autotest + rspec + ($KCODE = "u") + cygwin(UTF-8化) + ck.exe(or Poderosa)

rspecのログがUTF-8で流れてくるので、UTF-8のcygwinターミナルを使っているのですが、
autotestを実行時に Ctrl+C でautotest自体が終了してしまいます。
Ctrl+Cではテストの再実行を期待しています。
ただ、コマンドプロンプトでautotest実行した場合は、Ctrl+Cで期待通りテストが再実行されます。
(通常、終了は Ctrl+C→Ctrl+Cですよね。コマンドプロンプトでは期待通り)

autotestでイベント時にサウンドを鳴らすようにしているのですが、cygwinターミナルからだと、
autotest終了音がやはりなりません。

これはどういった対応策がとれるものでしょうか?
Windowsやその他の環境の皆様はどうしておられますか?

もし、他に該当スレがあれば誘導してください。
0854nobodyさん2009/04/05(日) 20:35:25ID:a/bIl6WE
link_to で、こういうのを生成したいのですが
<a href="http://sample.com/aaa/bbb/">http://sample.com/aaa/bbb/<;/a>
うまい書き方はないでしょうか??
第一引数で指定する部分が :controller とか :action で指定するものと重複するので、なんとか省略できないのかと思っているのですが・・
0855nobodyさん2009/04/05(日) 22:48:27ID:???
>>853
WindowsのコマンドプロンプトでUTF-8を表示する方法がある。

>>854
そういうヘルパを書けば良いだけでは。
link_toの第一引数が無くて、中ではurl_forを使うやつ。
0856nobodyさん2009/04/05(日) 23:00:04ID:???
>>854
link_to は第一引数に nil 渡すとURL文字列にリンク張ってくれるよ。

<%= link_to nil, :controller => :foo, :action => :index, :only_path => false %>
0857nobodyさん2009/04/05(日) 23:08:02ID:J2cktlyk
form で Validation エラーになると link_to_unless_current が上手く動作しなくなる・・・。
どうも form の Submit 先の URL が 「/shops/1/items」 みたいに「new」とかがない状態で生成されるからみたいなんだが、これってどうすればよい?
単純に redirect_to してしまうと Validation のエラーメッセージが消えてしまうし・・・。
0858nobodyさん2009/04/05(日) 23:50:04ID:???
>>857

そういえばみんなどうやってるのか気になるな。
自分は普段こんな感じ
エラー時はリダイレクトじゃなくてrender :action => アクション名で表示する

class SampleController < ActionController
 def new
  @shop = Shop.new
 end

 def create
  @shop = Shop.new(params[:shop])
  unless @shop.valid?
   render :action => :new
   return
  end

  @shop.save
  # 次の画面へリダイレクト
 end
end
0859nobodyさん2009/04/06(月) 00:08:52ID:???
確認画面無しなのか。羨ましいな。
確認画面入れるといろいろと面倒なんだよね。
IEだと入力画面でAjax使って入れた値が消えてくれたりとか。

自分なら、
render :action => :new and return unless @shop.valid?
と1行で書くかな。
0860nobodyさん2009/04/06(月) 00:32:13ID:???
>>859
あ、社内で使う管理画面は確認画面ない場合もあるけど、
実務ではほとんど確認画面あるよ。
その場合は、ボタンに名前(submitのname)付けて対応してる。
new -> confirm -> createという3画面の場合はこうかな。

# 確認画面
def confirm
 @shop = Shop.new(params[:shop])
 # 入力画面に戻る
 if params[:btn_back]
  render :action => :new
  return
 end

 # 登録
 if params[:btn_next]
  # エラー時入力画面へ
  render :action => :new and return unless @shop.valid?
  return

  # 保存して完了画面にリダイレクト
  @shop.save
  redirect_to :action => :create
 end
end
0861nobodyさん2009/04/06(月) 04:20:31ID:???
おれはコントローラにstate持つようにして、それでアンカーのON/OFFを切り替えるようにした
RESTを厳密に適用していくと、URIは(人間系の)画面表示から独立したものとして扱われていくような気がする
アンカーのON/OFFは人間系の処理なので、URIからどうこうするのは無理が出てくるのではないかと思う
つーか、routeの別名からアクセスしただけでも動かなくならね?的な柔軟性のなさが使えなさすぎるw

リダイレクト時のvalidation結果保持は俺も欲しいのよね・・・
エラーメッセージだけとかデータ量が小規模ならやりようがないこともないけど
リダイレクト時にエラーメッセージをあらかじめレンダリングしておいてflashで渡したりとか、シリアライズしたバリデーション結果をflashで渡したりとか
データ量が多い場合は使えないから、システム全体の統一感が崩れるのでやらない
POSTリダイレクトとかできんかなとも思った
0862nobodyさん2009/04/06(月) 13:55:03ID:???
>>860
実務レベルでそのコードは…
0863nobodyさん2009/04/06(月) 14:49:19ID:eCZIYZ8I
まぁ仕様を満たしていて不具合とかなければいいんじゃない?
0864nobodyさん2009/04/06(月) 19:01:32ID:???
Vista ユーザで ttp://kabus.dreamhosters.com/chm/rails/ にある chm が開けてる人いますか?

2.1.x や 2.3.x をいろいろとダウンロードしても

・起動時、セキュリティの警告が出る
・気にせず開いても「Web ページへのナビゲーションは取り消されました」と出る
・ただし目次、キーワード、検索は動く

という感じ。

rubymanjp.chm は問題なく動くのだけど。
0865nobodyさん2009/04/06(月) 21:25:24ID:???
ruby:1.8.7
rails:2.1.0
でやってるんだけどto_dateって使えないの?
ググったら1.8.6だとprivateメソッドで定義されて〜
とか書いてたけどto_datetimeやto_timeとかもundefind methodになる…
0866nobodyさん2009/04/06(月) 22:08:52ID:???
>>865
irbで試したけど、2.3.2では使えてる(Rubyは1.8.7-p72)。
require 'rubygems'
require 'activesupport'
"20090406".to_date
08678652009/04/06(月) 23:47:30ID:???
2.3.2か…
制作済みの社内アプリ全部2.1.0なんだよなぁ…
http://wiki.fdiary.net/rails/?AdjusterExtension-0001
に書いてる
unless @schedules.map {|s| s.schedule_date.to_date }.include?(date)
cell_text << link_to("New", :controller => 'schedule', :action => 'new', :id => @event, :date => date)
end
の部分で詰まってる。
to_dateじゃなくても出来そうな気がするんだけど。
もうちょい頑張って駄目だったら諦めて2.3.2にするよ。
0868nobodyさん2009/04/07(火) 01:31:04ID:???
その部分のソースだけコピペすればいいじゃん
0869nobodyさん2009/04/07(火) 06:41:24ID:???
ActiveSupportのソースを見ればいいじゃん
0870nobodyさん2009/04/07(火) 06:55:15ID:???
>>867
>>868-869のいうようにしたらいいと思うよ。

ActiveSupportのソース見ろって言われても分からないかもしれないから説明すると、
・gem install railsで2.3.2を入れる
・gem serverコマンドを実行してからhttp://localhost:8808にアクセス
・activesupportのrdocを見る
・Methodsのところにメソッド一覧があるからto_dateで検索

ActiveSupport::CoreExtensions::Time::Conversions
ActiveSupport::CoreExtensions::String::Conversions
あたりのto_dateのソースを見る(メソッド名のリンクをクリックするとソースが見れる)

ソースを自分のプロジェクトに使う時は、environment.rbの一番下でとりあえず定義すればいいと思う。
(他にもプラグインにするとか方法あるけど説明が面倒)

↓これはActiveSupport::CoreExtensions::Time::Conversionsのto_dateの例
irbでもコピペすれば動くよ

require 'date'
class Time
def to_date
::Date.new(year, month, day)
end
end
Time.now.to_date
0871nobodyさん2009/04/07(火) 08:30:14ID:???
>>870のやさしさに感動した
0872nobodyさん2009/04/07(火) 08:47:39ID:BAwL1OSs
gem serverはキーワード検索機能があるともっと便利だよね
0873nobodyさん2009/04/07(火) 11:19:37ID:???

>>864
よくある話で、IEでchmをダウンロードするとそうなるかも。
chm右クリックでのプロパティでセキュリティのチェックをはずすかつけるかするとみられるはずですよ。
08748532009/04/07(火) 11:22:41ID:???
>>855
> WindowsのコマンドプロンプトでUTF-8を表示する方法がある。
MSゴシックで、chcp 65001するやつですよね。
chcp 65001すると、何故か、autotestコマンドが動かないんですよね…。
何も出力されずに終了してしまう。chcp しないとちゃんと動く

うーん…
08758532009/04/07(火) 11:33:13ID:???
chcp 65001だと、irbも動かない(起動してすぐに終了してしまう)ですね。変なのー
08768642009/04/07(火) 11:45:20ID:???
>>873
ありがとうございます!
Fx 使いだったので、chm 右クリックして「ブロック解除」で見られるようになりましたー。
0877nobodyさん2009/04/07(火) 11:46:08ID:???
>>864
エクスプローラーから、そのchmファイルのプロパティ出して
セキュリティの項目のブロックの解除、をやる。

ダウンロードしたchmファイルはVistaではこれが必要。
0878nobodyさん2009/04/07(火) 11:47:50ID:???
セキュリティの項目って全般タブの一番下ね
0879nobodyさん2009/04/07(火) 11:49:11ID:???
ってギリギリ遅かったか
なんというタイミングだw
08808532009/04/07(火) 12:04:33ID:???
原因わかりました。chcp 65001だとバッチファイルが動かないみたいです。

直接、
 ruby (rubyインスコしたディレクトリ)\bin\autotest
としてautotestを起動したら無事に動かせました。

irbとかは chcp 65001だと日本語入力がそもそも効かずだめですねw

ありがとうございました。
08818532009/04/07(火) 12:18:13ID:???
>>880 でいけたと思ったのですが、やはり駄目でした。
日本語が ・・・・・・・ と点で表示されてしまうようです。

また、いろいろ試してみます。それでは失礼します。
0882nobodyさん2009/04/07(火) 12:29:06ID:???
そりゃフォントのせいだけどな
08838642009/04/07(火) 15:53:52ID:???
>>877-879
いえいえ、ありがとうございましたw
0884nobodyさん2009/04/07(火) 20:33:42ID:???
>>868-870
ありがとうございました。
to_dateはクリアできました。

で、今配列に{Sun, 19 Apr 2009=>[], Fri, 10 Apr 2009=>[],…}
ってな具合に1月分date型で入ってるんだけど
Tue, 07 Apr 2009 ←今日の日付
とinclude?するとfalseになる。
=>[]があるからfalseになるのかな?
include?って完全一致?
0885nobodyさん2009/04/07(火) 21:01:55ID:???
irb -rubygems -ractive_support --prompt=simple
>> days = (('2009-04-01'.to_date)..('2009-04-30'.to_date)).inject({}){|h,d| h.merge(d=>[])}; nil
>> days.include?('2009-4-7'.to_date)
=> true
08868542009/04/08(水) 13:05:31ID:yKX835d9
<%= link_to nil, :controller => 'cups', :action => :show, :id => params[:id], :only_path => false %>
これでいけました!レスくださった方々ありがとうございましたm(_ _)m
08878532009/04/08(水) 14:17:09ID:???
結局、rspecでコマンドプロンプトの時だけ、STDOUTで文字が出る前にSJISに変換してしまうことにしました。
半分あきらめに近いですが、SJISの範囲内ならまあいいということで…

例としては、spec_helper.rb(rspecで共通で読み込むルーチン)に以下を追加します。

require 'kconv'
if ENV['OS'] =~ /Windows/i && ENV['TERM'].nil?
  class StdoutHook
    def write(str)
      #    STDOUT.write str.to_s.kconv(Kconv::SJIS,  Kconv::UTF8)
      STDOUT.write str.to_s.tosjis
    end
    $> = new
  end
end

STDOUT乗っ取り?はMLの過去ログを参考にしましたが、もっといい方法があれば捕捉お願いします。
[ruby-list:45331] Re: Windows コマンドプロンプトで UTF-8を出力するには
http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-list/45331
08888532009/04/08(水) 14:46:23ID:???
>>887 修正
---- spec_helper.rb への追加コード ----

# only command prompt at Windows
if ENV['OS'] =~ /Windows/i && ENV['TERM'].nil?
  require 'kconv'
  unless defined?(STDOUT.old_write_for_cmd)
    class << STDOUT
      alias :old_write_for_cmd :write
      # override STDOUT.write
      def write(str)
        # old_write_for_cmd str.to_s.kconv(Kconv::SJIS,  Kconv::UTF8)
        old_write_for_cmd str.to_s.tosjis
      end
    end
  end
end
0889nobodyさん2009/04/08(水) 16:29:28ID:???
rails のルートディレクトリを取得できるヘルパーなりはありませんか?

現在は File.dirname(__FILE__) + "/../log" とかやっているのですが、
RAILS_ROOT + "/log" とかできるといいなーと。
0890nobodyさん2009/04/08(水) 17:25:39ID:???
rails で便利な collection_select を、
rails 以外のふるーいアプリで使いたいのですが、

$ cat test.rb
require 'action_view'
collection_select(...)
$ ruby test.rb

としても undefined method `collection_select' なんて言われます。

ActionView.Helpers.FormOptionsHelper.collection_select(...

にした場合は undefined method `Helpers' for ActionView:Module と。

どうすれば rails 以外から collection_select が使えるようになりますか?
0891nobodyさん2009/04/08(水) 20:49:56ID:???
>>889
自分で試してみたの?
普通にRAILS_ROOT使えるよ。
0892nobodyさん2009/04/08(水) 21:33:38ID:???
最近は Rails.root (Rails.env とか Rails.loggerもあるよ!)
0893nobodyさん2009/04/08(水) 22:18:15ID:???
>>892
お、それは初めて知った。
今試してみたら、Rails.rootはPathnameで返って来るんだね(RAILS_ROOTはString)。
0894nobodyさん2009/04/09(木) 00:12:20ID:Hon6X4Il
>>592
現に使われている以上、負け犬の遠吠えに他ならないレスだな
http://www.grails.org/Testimonials
08958532009/04/09(木) 01:42:24ID:???
>>888 なんですが、require "win32/console/ANSI" が絡むと(+ rspecオプションで--colur)、
文字化けしまくりで、
直すのやっかいそう&そろそろrails関係なさげなので、本スレの方に行ってきます。
0896nobodyさん2009/04/09(木) 10:06:46ID:8toP/BB5
2.2.2 で gettext で動かせてる人っています?
もしいたらバージョンと設定方法教えてもらえないでしょうか・・・。
0897nobodyさん2009/04/09(木) 10:55:54ID:???
2.2.2では、Rails標準のi18n使った。
その頃gettextは対応してなかったので。
gettext 2.0.0 出たし、いまはどうか分からないな。
08988962009/04/10(金) 00:58:01ID:???
>>897
レスありがとうございます。
やっぱり無理なんですかね・・・。
公式に「無理!」って情報とかってあったりするんでしょうかね・・・。

ちなみに、i18n を使う場合、メールの iso-2022-jp 周りとかってやっぱり自前になるんですか?
0899nobodyさん2009/04/10(金) 08:58:13ID:4tZH5Ujq
そうなるね。
でも、iso-2022-jpで送信する方法は検索すればすぐ見つかるから苦労しないと思う。
0900nobodyさん2009/04/10(金) 10:03:18ID:???
iso-2022-jp の場合、日本語の添付ファイルが化けるけど、
RFC 違反だけど、多くのメーラで文字化けしない方法ってあるよね?
その ruby 版のコードってどこにありますか?><
0901nobodyさん2009/04/10(金) 11:29:23ID:???
rails _2.3.2_ add して
ttp://code.nanigac.com/source/wiki/view_title/641/%E8%B6%B3%E3%81%97%E7%AE%97
をコピペして勉強してます。

値を入れずにボタンを押すと

undefined method `self_and_descendants_from_active_record' for Add:Class

が出ます。ググると
ttp://jijixi.azito.com/cgi-bin/diary/index.rb?date=20090317#p02
があったので、app/controllers/add_controller.rb に

def self_and_descendants_from_active_record
 self_and_descendants_from_active_record
end

としてエイリアス?を用意しても変わらず。どうすれば解決するでしょうか。
0902nobodyさん2009/04/10(金) 12:17:16ID:???
それコントローラーのメソッドなのか?モデルじゃなくて?
0903nobodyさん2009/04/10(金) 13:02:54ID:???
activerecord-2.3.2/lib/active_record/base.rb にあるものだけど、2.3.2 になってスペルミスが修正されたみたいなのです。
09048532009/04/10(金) 14:04:46ID:???
>>888
・win32/console/ANSIのせいで、rspecオプションに--colourつけると文字化けする
 (というかstdout.writeを上書きできてない)のを修正した。
・UTF-8→SJISの変換の際に、Kconv.tosjis使うと半角カタカナが全角になったり、
 MIMEが変換されたりするのを防止するためにnkf使うように修正

---- spec_helper.rb への追加コード ----

require "nkf"

# convert $stdout to sjis for command prompt at Windows
if !defined?($stdout.old_write_for_sjis_filter) &&
RUBY_PLATFORM =~ /win32/ && ENV['TERM'].nil?
class << $stdout
alias :old_write_for_sjis_filter :write
def write(str)
# change to sjis AS IS
old_write_for_sjis_filter NKF.nkf('-sxm0', str.to_s)
end
end
# puts "overrode $stdout.write"
end

何回もうざくてゴメン。たぶんこれで最後です。
09058532009/04/10(金) 14:05:38ID:???
>>904
ぎゃーインデント崩れた。うざいのでそろそろブログの方に書きます

require "nkf"

# convert $stdout to sjis only command prompt at Windows
if !defined?($stdout.old_write_for_sjis_filter) &&
    RUBY_PLATFORM =~ /win32/ && ENV['TERM'].nil?
  class << $stdout
    alias :old_write_for_sjis_filter :write
    def write(str)
      # change to sjis AS IS
      old_write_for_sjis_filter NKF.nkf('-sxm0', str.to_s)
    end
  end
#  puts "overrode $stdout.write"
end
0906nobodyさん2009/04/10(金) 21:19:22ID:???
sjisのテキストファイルの添付なら、変換せずにbase64とかで包んで添付したほうが良い。
oeとかがどうやってるか、ちゃんと生メールを見て同じように処理するのが問題が少ない。
基本的に、文字の入力はjisで行わせて無変換で送るようにしたほうが文字化けを回避できる。
最悪、utfで統一でも支障はない。

http://pc12.2ch.net/test/read.cgi/tech/1230466044/
ネットワークプログラミング相談室 Port23
http://pc12.2ch.net/test/read.cgi/tech/1235800707/
ネットワークプログラミング雑談
0907nobodyさん2009/04/11(土) 00:35:00ID:???
>>901
たぶんActiveForm使ってる?
2.2から国際化の仕組みが入ってて、そのままだとエラーになるみたい。
自分はActiveFormのコードを修正して対応したよ、以下参考に。。。

active_form.rb
class << self # 51行目くらいの所に下のコード追加
def self_and_descendants_from_active_record
[self]
end
def human_name(*args)
name.humanize
end
end

もしくはここから新しいやつ落としたほうがいいかな・・・。
ttp://github.com/cs/active_form/tree/master
0908nobodyさん2009/04/11(土) 06:28:01ID:???
MerbアプリをGoogle App Engineで動かしました - Hello, world! - s21g
http://blog.s21g.com/articles/1418

JRuby + RailsもGoogle App Engineで動くんじゃね?

0909nobodyさん2009/04/11(土) 12:04:21ID:???
いやもう動かしてる人いるし。その記事より前に。
0910nobodyさん2009/04/11(土) 13:01:50ID:???
>>909
kwsk
0911nobodyさん2009/04/11(土) 13:37:10ID:???
直接Railsが動くようにしてほしいのだが。Amazonはできるのに。
0912nobodyさん2009/04/11(土) 17:57:50ID:???
802 名前:nobodyさん[sage] 投稿日:2009/04/11(土) 15:06:07 ID:???
JRuby on Railsも動いたみたいだね。
JRuby on Rails on Google App Engine勝手訳 - ずっと君のターン
http://d.hatena.ne.jp/technohippy/20090408/1239196300

せっかくのActiveRecord(O/Rマッパ)使えないからつらそうだけど
0913nobodyさん2009/04/12(日) 12:14:31ID:???
Rails 2.3からリクエストの結果がキャッシュされるようになりましたが
このキャッシュを特定のアクションでキャッシュさせない事はできるでしょうか。

Ajaxのリクエストがキャッシュされ、
前回実行時の結果がレンダリングされてしまうのを防ぎたいのですが。
0914nobodyさん2009/04/12(日) 12:42:56ID:???
Ajaxのリクエストってよく分からんのだが。
Javascriptで描画した内容が元に戻るってこと?
0915nobodyさん2009/04/12(日) 15:56:54ID:???
CSS同様、ブラウザの実装次第じゃないの?
0916nobodyさん2009/04/12(日) 16:59:20ID:???
>>913
>Rails 2.3からリクエストの結果がキャッシュされるようになりましたが

こういう認識に至ったのはどういう訳で?
09179132009/04/12(日) 22:23:27ID:???
>>916
Rails2.3のリリースノートです。

5.8 Improved Caching Performance
Rails now keeps a per-request local cache of read from the remote
cache stores, cutting down on unnecessary reads and leading to better
site performance. While this work was originally limited to
MemCacheStore, it is available to any remote store than implements
the required methods.

実際にどういう箇所で問題が起きているかというと、モーダルです。

1. モーダルをAjaxで開く
2. モーダル内で何か操作を実行(モーダル内のHTMLがAjaxで書き換えられる)。
3. モーダルを閉じる
4. モーダルを再び開くと、2.の結果がそのまま表示される

という状態です。

こちらとしては、モーダルを開いたら初期状態でモーダルの内容が
表示されて欲しい訳です。
Rails2.2まではその通りの動作でした。
しかし、Rails2.3に上げた所、
モーダル操作後の結果がキャッシュされるようになってしまいました。

4. の再びモーダルを開く際には、モーダルが開いてもコンソールログは出ません。
なのでリクエスト自体がキャッシュされていると思います。
09189132009/04/12(日) 22:33:52ID:???
ブラウザはFirefoxとSafariで試してみました。

少し自分で2.3.2のソースを読んでみようと思います。
お騒がせしました。
0919nobodyさん2009/04/12(日) 22:42:03ID:???
本当にリクエストをうってるかを確かめる方が先なのでは。
キャッシュされているというのは推測みたいだし。
Parosとかのパーソナルファイアーウォールを使えばリクエストもレスポンスもキャッチできる。
0920nobodyさん2009/04/12(日) 22:43:11ID:???
パーソナルファイアーウォール

ローカルプロキシ

間違えた・・・
0921nobodyさん2009/04/13(月) 01:17:43ID:???
local cache storeとremote cache storeって何だろう。
remoet cache storeの例にMemCacheStoreが挙げられているから、
localってのはRails Framework側で持ってるcache storeのことなのかな。
0922nobodyさん2009/04/13(月) 03:33:44ID:Mmo44XLB
link_toをモデルクラスで使いたいのですが、どうすればいいでしょうか??
そもそもモデルクラスでlink_to使おうとするのは邪道でしょうか?
教えていただけると幸いです。
0923nobodyさん2009/04/13(月) 06:44:46ID:???
http://slashdot.jp/developers/09/04/10/0421223.shtml
0924nobodyさん2009/04/13(月) 07:48:49ID:???
>>923
タイトルくらい貼ろうぜ

Twitter、Ruby on RailsからScalaへ - スラッシュドット・ジャパン
http://slashdot.jp/developers/09/04/10/0421223.shtml

Twitter は Ruby on Rails で構築されたそのインフラを徐々に Scala に置き換えているそうだ (Technology Review の記事, 本家 /. 記事) 。
Twitter ではフロントエンド、バックエンド共に Ruby on Rails が使われていたが、
最近では大量のメッセージを処理できず「Fail Whale」出現の原因となったりしていた。
このため Twitter の開発チームは代替言語として Scala を採用、少しずつバックエンドや
インフラを Scala に置き換えているそうだ。スイス連邦工科大学ローザンヌ校の
Martin Odersky 氏によって開発された比較的新しいプログラミング言語である Scala は
並列プロセスの処理に長けている点が Twitter に向いており、
また言語としてのフレキシビリティも開発にとっては魅力とのこと。
短所としては、機能も多く、シンタックスも見慣れた感じでは無いため習得が簡単ではないことと、
新しい言語であるため実績がまだ少ないことだという。
それでもTwitterでは多くのテストケースを成功させており、Scala の方がメリットが多いと考えているようだ。

開発チームはフロントエンドは Ruby on Rails のまま、
年内には API リクエストの一連の処理を Scala で行えるようにしたいとしている。
0925nobodyさん2009/04/13(月) 08:37:28ID:???
こっちにはまだ貼られてなかったのか。
0926nobodyさん2009/04/13(月) 10:33:52ID:???
MQ の部分でしょ。Scala でも Erlang でもご自由にとしか。
あと、計算なら C でもいいし。

フロント部分が Scala/C はありえんけど。

言語は使い分け。
0927nobodyさん2009/04/13(月) 11:40:40ID:???
まえ初心者スレだったかに、一つのシステムに複数言語を使う仮定を書いたが、
そんなケースはほとんどないとか言われたな。そういう考えのやつも多いのだろう。
0928nobodyさん2009/04/13(月) 19:37:14ID:???
どっかにフロントエンドもscalaに置き換えつつあるとか書いてあったな
そのうちscalaフレームワーク公開してくるかもな。

>フロント部分が Scala/C はありえんけど。
CはともかくScalaはrubyと比べても良い言語だし、ありえないことは無い。
0929nobodyさん2009/04/13(月) 20:45:25ID:???
migrationで、mysqlでいう
add column after hoge
をやりたいのですが、afterに相当する機能がないっぽいです。クエリべたっと書けばできますが、スマートな方法はないでしょうか?
0930nobodyさん2009/04/13(月) 21:34:04ID:???
>>929
特定のDBMSに依存する処理は素直にSQL書くのがスマートだと思うよ。
add column afterがDBMSとして一般的な機能でRailsがサポートしていないなら
プラグインを作る価値はあると思うんだけど、MySQLだけとかだったら
やっぱり直接SQLを書いたほうが誰が見ても分かりやすい。
0931nobodyさん2009/04/13(月) 22:23:22ID:???
mysqlを理解してればの前提付きだな。
抽象化したほうが、DB変わった場合の環境でも手直しは少ないと思うけどな。
0932nobodyさん2009/04/16(木) 02:18:06ID:???
db変わるという前提付きだな。
損の方が多い。
0933nobodyさん2009/04/16(木) 10:11:07ID:???
DB変わるより言語変わる可能性の方が普通はるかに高いからね
0934nobodyさん2009/04/16(木) 19:02:58ID:RLOaA3va
質問なんですが、
/aaa/30000/bbb/ccc
というURLにリクエストが来たとき、
30000というidを取得しつつ、
aaaコントローラのbbb_cccアクションが呼ばれるようにしたいのですが、そういったことは可能でしょうか??

0935nobodyさん2009/04/16(木) 19:42:35ID:???
Rails 2.1.1 で初めて Rails をやりはじめました。
「Rails によるアジャイル〜第二版」を読みながらやっているのですが、さっそくはまった。

1. rails depot
2. (DB作成)
3. nruby script/generate model product
4. rake db:migrate
5. ruby script/generate controller admin

ここまで実行し、本のP.62 の通り、admin_controller.rb において

class AdminController < ApplicationController
 scaffold :product
end

と修正して、mongrel を立ち上げてブラウザで
http://localhost:3000/admin にアクセスしたのだけど、

NoMethodError in AdminController#index

と出る。products テーブルの CRUD 画面が出ないのですが、
どうしたらいいのでしょうか。

http://d.hatena.ne.jp/idesaku/20071211/1197386955
にあるように、以下のようにやらないといけないのですか?
ruby script/generate scaffold モデル名 テーブルにあるカラム

すでに 上記 3. と 4. で、空のモデルクラスとテーブルは出来ているので、
AdminController を直すだけには出来ないのでしょうか?
0936nobodyさん2009/04/16(木) 19:47:12ID:???
indexメソッドを追加すればいいじゃん
09379352009/04/16(木) 19:57:36ID:???
>>936
def index を追加し、app/views/admin/index.html.erb を作成すれば、
ブラウザでアクセスすれば、ページが表示されますが、それは CRUD 画面ではなく、
本の第4章の、Hello, Rails と同じですよね。

>>935 で示した hatena と同じように、別モデル(person)を
ruby script/generate scaffold person .....
としたら、自動生成された people_controller.rb には、結構な量のソースが生成されたのだけど、
Rails 2.0 からは、コントローラに scaffold と1行書けばよい、というやり方は廃止になった、ということ?
0938nobodyさん2009/04/16(木) 21:01:57ID:???
その本の第4章は知らんがな。。。

Railsは変化が激しいから本と違うバージョンでやらない方がいいと思うよ。
1.2からはスキャフォールド生成の手順からして変わってる。
レス数が900を超えています。1000を超えると表示できなくなるよ。