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

【Ruby】Ruby on Rails Part7

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん2009/04/30(木) 23:07:27ID:???
■前 Ruby on Rails のスレ が
http://pc11.2ch.net/test/read.cgi/php/1224838013/

■参考サイト
<英語>
本家: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 35
http://pc12.2ch.net/test/read.cgi/tech/1238194350/
Ruby 初心者スレッド Part 27
http://pc12.2ch.net/test/read.cgi/tech/1238632943/l50
0528nobodyさん2009/07/02(木) 14:47:35ID:???
>>525
Linuxで実際にGUI開発環境使ったことある?
おれはVirtualBoxでCentOS入れて開発してるけど、
ことGUI周りに関してはWindowsのよさを痛感すると思うよ。
0529nobodyさん2009/07/02(木) 15:23:03ID:???
WindowsのGUIのどの部分が優れているのか詳しく
0530今日は曇り  ◆twZ04DwX3o 2009/07/02(木) 15:25:05ID:w8jxLyuc
ここnobodyさんしかいないのか?
0531nobodyさん2009/07/02(木) 16:27:52ID:???
>>530
ここは、ってどういう意味?

どこかnobodyさんがいないスレでもあるのかい?
0532nobodyさん2009/07/02(木) 18:08:14ID:???
>>527
ホップ数とか、ラウンドトリップの時間なら手元で調べられるんじゃない?
他に何が知りたい?

単純にHTTPとかアプリサーバの反応の軽い重いとかだとサーバのロードも関係してくるしなぁ。
0533nobodyさん2009/07/02(木) 18:54:23ID:???
超初心者用豆知識

gemからRailsをインストールするのにFWが邪魔して、できないこともある。
うまくいかない人は、FWを一時的に無効にして再挑戦w
0534nobodyさん2009/07/02(木) 19:53:19ID:???
>>529
使ってて一番大きいのは反応じゃないだろうか。
遅いというのもあるけど、反応にばらつきがある。
細かい動作の完成度もバカにならない。ペーストが変なところに貼り付いたりとか。
なんだかんだ見た目もWinはかなり配慮されてるし。まあ、これは個人的な印象。
かけてる金がすごいだろうから、当然と言えば当然だけどね。
0535nobodyさん2009/07/02(木) 21:23:46ID:???
CentOSはデスクトップで使うことなんか考えて作られてないんだから、
それとWindowsを比べてどうすんだ。
比べるならUbuntuだと思うが。
0536nobodyさん2009/07/02(木) 21:27:12ID:???
それにLinuxデスクトップは、自分好みにカスタマイズしてなんぼだ。
現状が気に入らないならスキル次第でかなり深いところまで変更
することができる。

初心者から上級者まで一律お仕着せのMacとそのマネのWindows
とはそこが違う。
0537nobodyさん2009/07/02(木) 21:33:39ID:Ot61hTL3
しかしわざわざGUIにスキルを使うのもどうかと。
0538nobodyさん2009/07/02(木) 21:55:27ID:???
>>534
> 遅いというのもあるけど、反応にばらつきがある。
これLinux関係ないな、メモリが少なくてスワップ発生、
HDDは遅いけどディスクキャッシュが効いてるから速くなったり遅かったり、
て事でしょ?Windowsでもなるよ

コピペとかはまあ、操作体系の違いだから慣れるしかない
WindowsのGUIライブラリは基本的に一つしか無いから
その辺がまとまってるのは優れてるといってもいいか
0539nobodyさん2009/07/03(金) 01:21:53ID:???
まあ規模が違うから、ウィンドウズのほうが枯れてまともに使えるところはある。
犬だとまだまだ使ってる香具師が少ないから洗練されてない。

鯖なら常時起動してるから、起動させっぱにすれば良いだけ。
perlもjavaも同じ。そのためにmod_rubyとか小細工してるし。

開発だとどこでも開発したくて、ノートとかに開発環境作ると、ウィンドウズの便利さを痛感する。みんながモバイルで当たり前に使ってるありがたさ。
その当たり前の機能が犬だとまだまだ不十分なのが現実。
0540nobodyさん2009/07/03(金) 10:04:52ID:???
>>523
フフン、思ったより骨がありそうだな。だが次の質問はどうだ。
今度は質問が長いぞ。
「現在時刻を知るにはどうすればよいか、と問えば Time.now と答えるだろう。
二時間前なら 2.hours.ago だ、と聞かれてもいないことまで答えるかもしれないな。
だが、それを一回のリクエストの間に何回も使う場合はどうするのだ。
毎回 Time.now では呼び出しのたびに、ちょっとづつ変わるわけだ。
だったら @time_now = Time.now として、二回目以後の参照は @time_now を使えばいい。
本当にこれでいいのかな?フフル、よく考えてみることだ。」

ねえ、どうかな、本当にこれでいいのかな?
何かRailsが用意してくれたリクエストされた時刻のようなものはないのでしょうか?
0541nobodyさん2009/07/03(金) 10:20:07ID:???
べつにRuby自体とは関係ないGUIの使い勝手なんてどっちでもいいじゃないの。
結局慣れとスキルの問題、と。

で、結局WinでRubyの起動がLinuxに比べて遅いのはガチ?
0542nobodyさん2009/07/03(金) 10:44:56ID:???
>>540
Railsに実装されているすべての機能を知ってるわけじゃないから確実ではないがたぶんないように思う。

リクエストの中で何度も使うならコントローラーの中で変数に格納する。
べた書きするんじゃなくてfilter機能を使う。
すべてのコントローラーで使いたいならApplicationControllerにfilterを入れる。

フレームワークを使うと「フレームワークで機能が提供されているなら何が何でも使わなければならない」
という強迫観念みたいなものにとりつかれるときがある。こうなると、

・今回のようにただ変数にセットすれば10秒で済むものを、何か機能がないか調べまくる(かえって時間が膨大にかかる)
・後でフレームの機能を使ってないことが分かると(または機能が追加されると)、すべて修正してきれいにしたくなる(きりがない)

などの強力な副作用が出てくる。
フレームワークで提供されてるものを無視しまくるのも問題だが。

まず提供されている核となる重要な機能はしっかり押さえるけど、
周辺の便利機能は逃しても仕方ないくらいでやらないと何も進まないぞ。
今回の場合だと、「コントローラーに実装→filterを使う」というのははずしちゃいけないと思う
(ほかにいいやり方があるかもだが)。

というわけで完全な答えじゃなくて申し訳ないが、次
0543nobodyさん2009/07/03(金) 13:03:46ID:???
フレームワーク全体を大まかに知るには
ttp://guides.rubyonrails.org/
これが期待できそうだよね。

日本語訳が無いんだけど↓
ttp://honyaku.ssktkr.com/projects/docrails/documents

0544nobodyさん2009/07/03(金) 13:25:36ID:???
>>532
同じ画像を国内のレンサバとlinodeにおいて、
ブラウザからアクセスしたときのタイムラグがわかるとありがたいです。

ホップ数を測るというのはlinode.comに対してということでしょうか。
サービス用のインフラと、自社サイトのインフラが同じかどうかわからないと思うのですが。
0545nobodyさん2009/07/03(金) 13:34:22ID:???
>>543
本人?
これ手伝おうかと思ったけど、
一番下の

>http://github.com/takeru/docrails/tree/master
>最終的にはここに入れます。

を読んでやる気なくした。

何で全部個人の手柄なんだよ。
0546nobodyさん2009/07/03(金) 14:00:42ID:???
本家に持っていく経由地としてそのリポジトリがあるだけじゃない?
なんなら545が最終的なまとめをやってあげれば?手柄ゲットだぜ。

1行ずつ訳すって中学の英語の授業みたいだなw
おもろいっw訳がガタガタになりそうだが。
0547nobodyさん2009/07/03(金) 14:13:25ID:???
>「最終的には」ここに入れます。
ってことは自分の手柄にするのが目的なんだろ。
0548nobodyさん2009/07/03(金) 14:48:17ID:???
ちょいと細かいことで、お聞かせ願いたいのですが、
共通な定数ってどこに書いたらよござんすか?

今は、コントローラーから参照するものはapplication_controller.rbに書いているんですが、
その他からも参照するようなときはどこに書いたものかと…。
0549nobodyさん2009/07/03(金) 14:48:37ID:???
>>543 のサイトの本人でございます。
親切な方がメールでこのスレで紹介されたと教えてくれました。

成果を独り占めする気はございません。
最終的には本家に入れば良いと思っています。
もちろん日本語版翻訳協力者のリストを付けるべきだと思っています。
0550nobodyさん2009/07/03(金) 14:55:02ID:???
過去スレから見つけてきた。

Ruby on Rails のスレ が
http://pc11.2ch.net/test/read.cgi/php/1207425569/792-796

792 名前:nobodyさん[sage] 投稿日:2008/08/18(月) 22:54:04 ID:???
RAILS_ROOT/libが $: に含まれてるからそこにおけばいいんじゃない?
名前をお約束通りに付けておけばconst_missingを捕まえて勝手にrequireするし。

795 名前:791[sage] 投稿日:2008/08/19(火) 23:50:18 ID:???
>>792
>>793

レスありがとう。

今はlibの下に置いてApplicationControllerでincludeしてるんだけど、「お約束通り」の命名にすればそれが不要ってこと?
定数名にRailsの命名規約があるの??

796 名前:nobodyさん[sage] 投稿日:2008/08/20(水) 08:25:05 ID:???
定数というか、モジュール/クラス名がconst_missingのとき、
その名前をオール小文字/単語境界をunderscore化、ネストをディレクトリ
とみなしたファイルがrequireされる。

たとえば、いきなりinclude FooBar::Bazとか書いて未定義の定数を使うと、
require 'foo_bar/baz' される。

----------------
ということは、lib/以下に common.rb みたいなの置いてmodule Common内に定数を書き、
使うところで(ApplicationControllerとかで?)
include Common して、定義してある定数 Hoge を使うか、
Common::Hoge を直接使う、ということでいいんでしょうか?
0551nobodyさん2009/07/03(金) 15:12:18ID:???
>>549
酷い自演を見た
0552nobodyさん2009/07/03(金) 15:16:54ID:???
定数をlib以下に切り出すってのはさすがに抵抗ある。
そこまで規約に従う理由があるのか?
0553nobodyさん2009/07/03(金) 15:54:42ID:???
定数Hogeの内容にもよると思う
0554nobodyさん2009/07/03(金) 16:34:28ID:???
>>552
$RAILS_ROOT/lib にクラスとかモジュールの実装を置くのは普通だと思うが、なんで?
rubyはクラスもふつう定数だがクラスは動的に書き換えられるのでなんか混乱するな。
0555nobodyさん2009/07/03(金) 16:42:35ID:???
これからRubyを覚えようと思うのですが、Rails使うには、Rubyが分かってないとダメですか?
0556nobodyさん2009/07/03(金) 17:24:33ID:???
libはあくまでライブラリじゃないの
自分で定義したものはやっぱりapp以下に置くのが自然に思うけど
0557nobodyさん2009/07/03(金) 18:01:42ID:???
lib/ は自分が書いたものの中で、Modelとか、Controllerとか、Helperとかに含まれないものを置く場所。
READMEに書いたある。
0558nobodyさん2009/07/03(金) 18:37:16ID:???
外部ライブラリはvendor/plugins以下に、自分が用意したものはlib以下に、って解釈でいいのかな?
0559nobodyさん2009/07/03(金) 18:47:47ID:???
>>558
vendor/pluginsはプラグインとして使えるように作られたものを置くところ。
自分でプラグインを作ってもOKなので、外部製とは限らない。

app以下はやっぱり
app/models(ActiveRecord::Baseのサブクラス)
app/controllers(ActionControllerのサブクラス)
app/helpers(ヘルパとして使うmodule)
を置くところであって、それ以外はlib/でよいだろう。

もとの質問の定数定義についてだけど、定数の名前が重要で値自体にさして
意味がない(互いに異なりさえすればよい)場合は 定数の名前に使う予定の
ものに相当するシンボルを使うことも一考に値する。
0560nobodyさん2009/07/03(金) 19:37:06ID:???
Rails pluginの管理はみなさんどうしてますか?
RubyGemsで入るRaptというのを使おうとしたのですが、githubには対応してなさげ…

githubのものでgemが作られてるものは、RubyGemsで入れればいいんでしょうけど、
小さいプラグインだとないものもあります。

script/pluginで手動管理でしょうか?
0561nobodyさん2009/07/03(金) 22:48:31ID:???
script/pluginだと何かまずいことがあるの?
個人的にはgemで用意されてるプラグインでも、汎用なものでなければscript/pluginでアプリケーションに個別に入れてる。
0562nobodyさん2009/07/04(土) 07:23:40ID:???
Rails2.3.2にはdispatch.fcgiがないのですが、fastcgi経由で動作させるためには
どっかからdispatch.fcgiをコピーしてくるのでしょうか?
ちなみに.htaccessもないもよう。
0563nobodyさん2009/07/04(土) 11:26:40ID:???
>>562
これっすかね?

Various files in /public that deal with CGI and FCGI dispatching are no longer generated
in every Rails application by default (you can still get them if you need them by adding
--with-dispatches when you run the rails command, or add them later
with rake rails:generate_dispatchers).

http://guides.rubyonrails.org/2_3_release_notes.html


Ruby on Rails 2.3 Release Notes
http://guides.rubyonrails.org/2_3_release_notes.html
0564nobodyさん2009/07/04(土) 12:20:26ID:???
もう触れるなよ。どうせ聞きっぱなしなんだから。
0565nobodyさん2009/07/04(土) 12:32:58ID:???
おれもそう感じてた
05665622009/07/04(土) 12:51:27ID:???
>>563
なるほど、サンクス!
0567nobodyさん2009/07/04(土) 19:22:01ID:???
販売か生産管理システム用のフレームワークってありますか?
0568nobodyさん2009/07/04(土) 22:48:17ID:???
Passenger(2.2.1)+VirtualHost使ってるのだが、

DirectoryIndex index.xhtml

ってやってもきいてくれずに404エラーになる。index.xhtmlは間違いなくある。
VirtualHostとDirectoryの両セクションコンテナでやってみたのだが。
これどうにかならないだろうか。おれだけ?
0569nobodyさん2009/07/05(日) 00:35:44ID:???
2.0に対応したRails本少ないなぁ…英語勉強するしかないかな
0570nobodyさん2009/07/05(日) 00:46:18ID:???
rubyしっかり勉強してソース読むのが王道
0571nobodyさん2009/07/05(日) 02:56:44ID:???
いや、それは無いだろさすがに
05725682009/07/05(日) 10:36:21ID:???
トップページだけ対処ということでRewriteにしてしまった
0573nobodyさん2009/07/05(日) 10:51:16ID:???
>>570
それ、なんて罰ゲーム?
0574nobodyさん2009/07/05(日) 11:38:01ID:???
railsのソース汚いよね。達人プログラマーでもあの程度なのかと思ってしまった。
0575nobodyさん2009/07/05(日) 12:38:44ID:???
David ThomasがRails自体を開発してるのか?Railsでの開発は好きらしいが。


まあ、口だけなのはわかってるけどなw
0576nobodyさん2009/07/05(日) 14:13:27ID:???
>>569
入門でいいなら、

・逆引き本
・Railsレシピ
・定番のAgile Web Development with Rails 3版を見ながらわからないところは、2版の日本語版を見る

俺はこんな感じで進めている。

>>574
汚いっちゅーか、黒魔術つかいすぎだと思う
0577nobodyさん2009/07/05(日) 19:27:05ID:???
rubyとしては見ては(ry
0578nobodyさん2009/07/05(日) 23:56:06ID:???
こんなパラメタ受け取りたいんだけど
params = {
 :hoge => [
  { :title => "タイトル1",
   :items => ["項目1","項目2",…]
 ]
}

上手いやり方知らない?
これだと上手くいかない
<%= text_field_tag 'hoge[][title]' %>
<%= text_field_tag 'hoge[][items][] %>
0579nobodyさん2009/07/05(日) 23:58:51ID:???
途中送信してしまった

こんなパラメタ受け取りたいんだけど
params = {
 :hoge => [
  {
   :title => "タイトル1",
   :items => ["項目1-1","項目1-2",…]
  },
  {
   :title => "タイトル2",
   :items => ["項目2-1","項目2-2",…]
  },
  …
 ]
}

上手いやり方知らない?
これだと上手くいかない
<%= text_field_tag 'hoge[][title]' %>
<%= text_field_tag 'hoge[][items][] %>
0580nobodyさん2009/07/06(月) 00:46:11ID:???
railsのコード読んだけどインデントの規則おかしくない?
0581nobodyさん2009/07/06(月) 10:08:07ID:???
>>580のエディタのtab幅の設定があってないとエスパーしてみる
0582nobodyさん2009/07/06(月) 10:19:10ID:???
>>581
Rails 2.3.2 だと、インデントにTABを使っている(grep '^TAB文字' で判断)のは
actionpack-2.3.2/lib/action_view/helpers/form_options_helper.rb
activerecord-2.3.2/lib/active_record/fixtures.rb
activesupport-2.3.2/lib/active_support/vendor/builder-2.1.2/builder/xchar.rb
のみだった。
0583nobodyさん2009/07/06(月) 10:20:51ID:???
どこを見たのか知らないけど普通だと思うが
0584nobodyさん2009/07/06(月) 14:29:53ID:???
「おかしい」「普通」という感想だけじゃ話にならんな。
0585nobodyさん2009/07/06(月) 15:02:08ID:???
いや普通はいいじゃんw
多少の違いはあるかもしれんが、
ほとんどのプログラマは「普通」の感覚があると思うぞ。
0586nobodyさん2009/07/06(月) 15:21:41ID:???
タブ文字使って自力でインデントする習慣の人は
2文字じゃ困るって話じゃないかな
0587nobodyさん2009/07/06(月) 17:07:12ID:???
rubyでヲレ書式に整形するスクリプトでも書けば済む話。
0588nobodyさん2009/07/06(月) 18:09:23ID:???
仕事場でも未だにタブでインデントする奴いるけどすげー迷惑
とくに年寄りにその傾向があるようだ
0589nobodyさん2009/07/07(火) 03:00:09ID:???
Java でも C でもいいけど、超有名なオープンソースソフトウェアでも、
ソースはけっこう汚いこともあるよ(ロジックが汚いという意味ではない)
インデントとかコメントのルールとか、全然統一取れていないこともある

NTT 系の仕事だったら、NTT のやつらに絶対だめ出し食らうレベル

>>588
Linux(Unix)が開発環境となっている環境(CとかPHP/Rubyが多いかな)は、
・インデントはタブ
・vi なり Emacs で、タブ幅を4
を前提というかコーディング規約にしているところは多いね。

そういうのをWindowsのエディタや Eclipse で見ると崩れて見える。
(設定すればいいのだが)

んで、文句をいうと袋だたきにあう

どっちがいいか、というのではなく、文化というか習慣の問題だと思うが
0590nobodyさん2009/07/07(火) 08:29:50ID:???
>>589
# vim:set tabstop=2 shiftwidth=2 expandtab:
Rubyでviなら↑がデファクトスタンダードだと思うのだが。
0591nobodyさん2009/07/07(火) 08:31:45ID:???
知らんがな
0592nobodyさん2009/07/07(火) 08:57:12ID:???
規約にしてるのに設定しないで文句言うって馬鹿ですか?
0593nobodyさん2009/07/07(火) 10:00:13ID:???
viやemacsも、デフォルトのタブ幅は8のはずだから、
Windows使ってるから特別にデフォルトでも4タブが崩れないようにしろって主張は、
ちょっと意味がわからない。
0594nobodyさん2009/07/07(火) 18:05:00ID:???
>>593
タブ幅が8で許されるのはいつの時代だよw
0595nobodyさん2009/07/07(火) 18:06:15ID:???
手元のRuby 1.8.7だと大丈夫なのですが、サーバーの1.8.6環境だと
おきるエラーがあります。

1.8.6系の問題でよくトラブるので、サーバーも1.8.7にあげる予定なのですが、
原因を知っておきたくてご相談します。

下記ソースの
    @sub_items = sub_items.all
のところで、ログ見ると↓見たいに言われてます。

LocalJumpError (no block given):
  app/controllers/sub_items_controller.rb:5:in `index'

下記のようにすると問題なく動くのですが…。
    @sub_items = @item.sub_items.all


以下、ソース
(config/routes.rb)
  map.resources :items, :has_many => :sub_items

(app/models/sub_item.rb)
class SubItem < ActiveRecord::Base
  belongs_to :item
end

(app/models/item.rb)
class Item < ActiveRecord::Base
  has_many :sub_items
end
05965952009/07/07(火) 18:08:13ID:???
(app/controllers/sub_items_controller.rb)

class SubItemsController < ApplicationController

  # GET /sub_items
  # GET /sub_items.xml
  def index
    @sub_items = sub_items.all

    respond_to do |format|
      format.html # index.html.erb
      format.xml  { render :xml => @sub_items }
    end
  end

  :

  # フィルタで必ず実行させる
  before_filter :must_item_present

  private
  def must_item_present
    @item = Item.find(params[:item_id])
  end
  
  def sub_items
    @item.sub_items
  end

環境: Rails 2.3.2, 鯖: Ubuntu 8.04LTS Ruby 1.8.6, テスト環境: Windows XP SP3, Ruby 1.8.7
0597nobodyさん2009/07/07(火) 20:24:32ID:???
質問よろしいでしょうか?

複数のfixtureで共通するERBコードをDRYしてどこかに書きたいものなのですが、
どこに置いたものでしょうか?

というか、fixture微妙につかいにくくないですか?
みなさん、どうしてます?
05985972009/07/07(火) 20:58:43ID:???
上でも出てたけど、factory girl使えってことなのかあ・・・

factory girl使った場合、rake db:fixtures:load 相当はどうやったらいいいもんですかね・・・
0599nobodyさん2009/07/07(火) 21:11:14ID:i/gOlMKP
2.2なんだが。 

view:
<% for .... %>
<%= check_box_tag('hoge_id[]',hoge.id) %>
<% end %>

複数のチェックボックスを動的に生成しているこのチェックボックスを
一つは必須入力にしたいのだがvalidateがうまくいかない。。orz

model:
validates_acceptance_of :hoge_id

↑↓動作せず。。。

:model

def validate
if read_attribute(:hoge_id).nil?
errors.add("nilnil")
end

エラーをみるとparamは hoge_id で渡ってきているのだが
DBにhoge_idがないためチェックが通らない?
(DBにはho_idという名前にしてある)

hoge_id[] にするとNoMethodErrorだし。

助けて・・・m(__)m
0600nobodyさん2009/07/07(火) 21:25:49ID:QCi36J2S
Ruby 1.8.7 rails 2.3.2
test環境作ろうと gemで autotest-rails を入れたんだが、
使ってみると、色も無い、ポップアップもなくて殺風景なんだが、
にぎやかに error 教えてくれるものないかな?
0601nobodyさん2009/07/08(水) 09:57:29ID:???
Windows + Netbeans + RoR + CRuby + mongrel で

uri = URI("http://localhost:3000/funyafunya/")
res = uri.read

こんなふうにすると uri.read で止まっちゃうんすよね。
mongrel が一度に一コネクションしか処理してくれないからっすかぁ?
やっぱ、そうっすよねぇ。

どうやったらぁマルチにできますか?無理っすかぁ。
0602nobodyさん2009/07/08(水) 11:14:05ID:???
>>601
どーしてもHTTP経由がいいなら、mongrelを複数立ち上げてロードバランサを前に置くか、passengerにするか。
HTTP経由でなくてもいいなら、render_component とか。

render_component はプラグインになったんで注意な。
06036012009/07/08(水) 19:55:48ID:???
別のプロジェクトにしますた。
0604nobodyさん2009/07/08(水) 21:34:05ID:???
ぽーとかえてにこたちあげればよかたね
0605nobodyさん2009/07/09(木) 00:50:39ID:???
昔 2.1.0 の頃に少し挑戦しました。
いまは 2.3 で、トランザクションのネストができると聞きました。

質問です!
トランザクションってControllerでするのでしょうか?
それともModelでするのでしょうか?
2.3 以前と以降で話が違いますか?

ついでにもうひとつお願いします。
ttp://webtama.jp/series/railstips/articles/31
「そうでなければ、ネスト処理は単純に
親トランザクションの一部として振舞います(Rails2.2の動作)」
↑これって、どういうことなのかわかりやすく教えてください。
2回目のトランザクションの開始と終了が無視されて、
1回しかトランザクションが処理されていないという意味でしょうか。
0606nobodyさん2009/07/09(木) 09:59:54ID:???
コントローラは処理の振り分け、
ビューは画面表示、
それ以外はモデルだと思えばいいよ。

一つに二つの質問は面倒。
0607nobodyさん2009/07/09(木) 17:41:28ID:???
ルーティングでコントローラーをネストした環境で、
url_forやbutton_toなどを使おうとしたのですが、
どのように引数を記述したものかわかりません。
どなたか、ご助言いただけないでしょうか?

例えば、/items/14/sub_items/45 のような場合は、
button_to("hoge", [@item, @sub_item]) のように記述すればいいのですが、

/items/14/sub_items/45/hage のようなアドレスにアクセスしたい場合、
どのように記述したものでしょうか?

button_to("hoge", :controller => [@item, @sub_item], :action => hage)

また、この辺のことを script/console で試してみようと、
下記のように script/console でurl_forなどヘルパーを実行しようとするとエラーが起きてしまいます・・・

script/console内でヘルパーをテストする方法 - yamazのRails日記 - Rubyist
http://rubyist.g.hatena.ne.jp/yamaz/20060818

>> helper.url_for :controller => 'items'
NoMethodError: You have a nil object when you didn't expect it!
The error occurred while evaluating nil.url_for
 from c:/ruby/lib/ruby/gems/1.8/gems/actionpack-2.3.2/lib/action_view/helpers/url_helper.rb:85:in `send'
 from c:/ruby/lib/ruby/gems/1.8/gems/actionpack-2.3.2/lib/action_view/helpers/url_helper.rb:85:in `url_for'
 from (irb):55
 from :0
0608nobodyさん2009/07/09(木) 17:52:22ID:???
RESTfulなルーティングを定義していれば、
item_subitem_path(@item, @sub_item) # or _url
で。

consoleで使うには
app.item_subitem(以下ry

06096072009/07/09(木) 20:24:00ID:???
>>608
ありがとうございます!
_path使って /items/10/sub_items/11 のようにはアクセスできるようになりました。
script/consoleでも動きました。

/items/10/sub_items/11/hage のようなアドレスですが、
Rails 2.3だと、:format指定でいけました。
item_subitem_path(@item, @sub_item, :format=>:hage)

ただ、
/items/10/sub_items/11.hage

というようなアドレスになってるんですが、大丈夫なのかなこれ…。
0610nobodyさん2009/07/09(木) 21:51:02ID:???
:formatは、URLで拡張子のように見えるところに使うという規約。
同じURLでも拡張子によってHTMLやJSONやXMLを返せるようにするためのもの。

hageの部分はそのままでは表せないので
config/routes.rb に
map.resources :items do |item|
item.resources :sub_items, :member => { :hage => :get }
end
と書くと
hage_item_sub_item_path(:item_id, :id)
で
/items/:item_id/sub_item/:id/hage
を表せる。
この場合、 SubItemsController#hageが、HTTP Getで呼ばれる。
0611nobodyさん2009/07/09(木) 21:52:04ID:???
× .../sub_item/...
○ .../sub_items/...

どういう規則が定義されているかは rake routes で。
0612nobodyさん2009/07/09(木) 22:23:18ID:???
hageはアクションじゃなくて単なるパラメータの1つだ、という場合は
RESTfulなルーティングからそろそろ外れてくるので、独自に書く必要が
出てくると思う。

item.myaction 'items/:item_id/sub_items/:id/:para',
:action => 'myaction', :controller => 'sub_items'
とか指定すれば
item_myation_path(item, sub_item, :para => 'hage')
#=> /items/:item_id/i/sub_items/:id/:para
0613nobodyさん2009/07/09(木) 23:34:06ID:???
rake routes
0614nobodyさん2009/07/10(金) 02:38:02ID:UisZbpVA
>>490 ってエラーになるけど (paged_usersなんてメソッドないって)
原文ではなぜエラーにならないのか??

いまいちルーティングの書き方を理解できてない俺。
0615nobodyさん2009/07/10(金) 05:02:00ID:???
>>614
たしかに、
map.paged_users '/users/pages/:page'
だとエラーになる。

map.paged_users '/users/pages/:page', :controller => 'users', :action => 'pages'
みたいに書けば動く。
使うときは<%= paged_users_url(:page => 1) %>
(rails 2.2.2で確認)
0616nobodyさん2009/07/10(金) 08:40:52ID:???
修正ごとに、動作を確認したくて
サーバー起動して、
http://127.0.0.1:3000/
を表示させているんですが、
結構時間がかかります。

何かお手軽な方法はありませんか?
0617nobodyさん2009/07/10(金) 10:33:57ID:???
クラス定義の変更の場合、developmentモードならリロードされる
(config.cache_classes = false)ので、再起動の必要はない。

スタイルシートの狂いの視認とかでなければテストを書いて走らせるだけで済むかも。
0618nobodyさん2009/07/10(金) 12:42:54ID:???
>>616
Webrick使うのをやめてThinにする。
0619nobodyさん2009/07/10(金) 14:45:40ID:???
修正したらキャッシュ無効だから遅いのは普通。
0620nobodyさん2009/07/10(金) 16:42:14ID:???
>>616
developmentモードなら、修正ごとにサーバー起動する必要ないよ。
06216072009/07/10(金) 16:58:44ID:???
サンクス

>>612-613
rake routesでも確認してみています。

少し疑問があるのですが、
ネストしていない状態で、コントローラーにメソッド hage を勝手に定義して、
 :action => :hage, :id => @item
のような感じでurl_forなどに渡すと、>>612のように定義しなくてもちゃんとルーティングしてくるのですが、
これは、config/routes.rbの中の下記記述によるものなのでしょうか?

map.connect ':controller/:action/:id'
0622nobodyさん2009/07/10(金) 18:26:18ID:???
そゆこと。
0623nobodyさん2009/07/10(金) 19:26:54ID:???
URLはそうなるけど実際にアクセスしたら
resourcesで定義したshow呼ばれない?
06246072009/07/10(金) 19:31:50ID:???
うまくいったぁぁぁあfsりゅいゆjjきl

以下のような感じでうまく行きました。下記は、
  /items/:item_id/sub_items/:id/hage
のようにアクセスさせたい場合です。hage は getでアクセスするものとしてます。
(config/routes.rb)
  # /items
  map.resources :items do |item|
    # /items/:items_id/sub_items
    item.resources :sub_items,
      # /items/:item_id/sub_items/:id/hage
      :member => {:hage => :get}
  end

(app/controllers/sub_items.rb)
  :
  # GET /sub_items/1/hage
  def hage
    respond_to do |format|
      format.html { redirect_to(item_sub_item_url) }
      format.xml  { head :ok }
    end
  end

(app/views/sub_items/index.html.erb)
  :
  <% @sub_items.each do |sub_item| %>
    :
    <td><%= button_to("ハゲる", hage_item_sub_item_path(@item, sub_item), :method => :get) %></td>
  :

わかっている人には当たり前のことだと思うのですが、今日という日は、みなさま本当にありがとうございました。
0625nobodyさん2009/07/10(金) 20:14:06ID:???
盛り上がっているところ?失礼します。

セッションについてお聞きしたいのです。
webアプリ自身あまり慣れていない者なのですが、

「Agile Web Development with Rails」(3版)では、
セッションに複雑なもの入れんな(とかいいつつ、チュートリアルではクラスのインスタンス入れてたりしますが)

とあったり、

「Railsレシピブック」では P83に

   なお、Rails 開発チームの見解としては、セッションに入れるデータは、
   ユーザーのID(整数)とflash メッセージ程度にとどめることが推奨されています。

などとあるのですが、この辺の開発チームの見解はweb上でどこかに記述がありませんでしょうか?
参考にしたいのですが…
0626nobodyさん2009/07/10(金) 21:15:16ID:???
>>625
restful = state less = セッションにデータいれんな
0627nobodyさん2009/07/10(金) 21:18:35ID:???
sessionはcookieを使っているのですか
■ このスレッドは過去ログ倉庫に格納されています