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

【Ruby】Ruby on Rails Part6

レス数が950を超えています。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/
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からはスキャフォールド生成の手順からして変わってる。
0939nobodyさん2009/04/16(木) 21:03:03ID:???
「1.2からは」じゃなくて「1.2とは」だ
0940nobodyさん2009/04/16(木) 21:37:52ID:???
これかな?
http://yoshitan.blog6.fc2.com/blog-entry-194.html

1.2系とはちょこちょこ変わっているので2.x系の手順でできているなら、些末なところには拘らない方がいいと思う
最悪active_scaffoldでも代替できるしね
0941nobodyさん2009/04/17(金) 00:36:24ID:???
不要なHTMLのタグ隠蔽する方法教えて
ソースから見せたくないのだ
0942nobodyさん2009/04/17(金) 00:52:39ID:???
delキー押せばいいんじゃない
0943nobodyさん2009/04/17(金) 01:01:29ID:???
なんかここのところ、
質問してはその後まったくレスのないやつが多いな
0944nobodyさん2009/04/17(金) 01:55:27ID:???
質問の仕方や日本語の使い方から察するにかなり若い連中なんだろうと思ってる
09459352009/04/17(金) 02:31:23ID:???
>>940
レスどうもありがとうございます。
底や別のページを見て、Rails 1.2 系が持っていた scaffold 機能は 2.0 系でなくなったと理解しました。
scaffolding や ActiveScaffold を入れれば 2.0 でも1.2 系のことが出来るそうですが、
ややこしいので、ひとまず 別環境に Rails 1.2.6 を入れて、そっちで勉強することにしました。

もう一つグチ。「Rails によるアジャイル〜」の本で、(正確なページ数は忘れたが) P62 ページの後、
足りないカラム(price カラム)を足す演習がありますが、
Rails 1.2 系だと、rake db:migrate でカラム出すだけで、scaffold の画面をリロードするだけで
増えたカラムが画面に反映されるが、
Rails 2.0 で、>>935 に書いた
$ ruby script/generate scaffold モデル名
を再度実行しても、そもそも Contoroller や views/admin 以下の *.html.erb に
CRUD を行う HTML がべた書きされてしまっているため、増えたカラムが反映されない。
結局テーブルをドロップして、scaffold をやり直した。

どうして Rails 2.0 系は scaffold を廃止したのだろう?


といいつつ、よほどイントラ向けでユーザもうるさくない場合以外は、
業務ではscaffold なままの web アプリは使わない、と同僚からツッコミがあった。
0946nobodyさん2009/04/17(金) 08:44:46ID:???
>>941
<% if false %>
 見せたくない箇所
<% end %>
0947nobodyさん2009/04/17(金) 14:31:56ID:???
どうせ漏れる時は漏れる。埋め込み言語の宿命。
0948nobodyさん2009/04/17(金) 15:03:11ID:???
漏れても大丈夫。多い日でも安心。
0949nobodyさん2009/04/17(金) 21:21:58ID:???
RoRサイトも踏み台だな。
0950nobodyさん2009/04/17(金) 22:57:15ID:???
>>945
自分もRailsに慣れるとscaffoldは使わない事が多くなってくるので、
scaffoldに固執しないほうがいいと思う。

基本的な流れというか使い方を覚えたら、
最新版のRailsで何か作るほうがいいんじゃないかな。
当然、バージョンが違う事で詰まる部分があるんだけど
ググったり、このスレで聞いたりすればなんとかなる。
0951nobodyさん2009/04/18(土) 01:28:25ID:???
scaffoldって、コントローラに scaffold と書くと使えるようになるscaffoldと
generateで作るやつがあるが、後者は2系でも普通にある。こっちはRESTful
なリソースを公開しようとすると、なんだかんだ言って基本的な骨組みは
scaffoldのものが使えたりする。
09529342009/04/19(日) 20:26:48ID:GcnrJHDf
>>934 分かる方いらっしゃましたらご教示頂けると幸いです><
0953nobodyさん2009/04/19(日) 21:43:31ID:???
>>952
map.connect ':controller/:id/bbb/ccc', :action => 'bbb_ccc'

0954nobodyさん2009/04/19(日) 21:44:38ID:???
書いてから思ったが、そういうのがaaa限定なら変にいろいろ受け付けるようにせず
map.connect 'aaa/:id/bbb/ccc', :controller => 'aaa', :action => 'bbb_ccc'
のほうがいいか。

レス数が950を超えています。1000を超えると書き込みができなくなります。