トップページ⇒php
986コメント359KB

【Ruby】Ruby on Rails Part8

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん2009/09/13(日) 20:49:34ID:kz4rC4Dx
■前 Ruby on Rails Part7
http://pc11.2ch.net/test/read.cgi/php/1241100447/

■参考サイト
<英語>
本家: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 37
http://pc12.2ch.net/test/read.cgi/tech/1251029267/
Ruby 初心者スレッド Part 30
http://pc12.2ch.net/test/read.cgi/tech/1249687283/
0002nobodyさん2009/09/13(日) 20:50:59ID:???
前スレ999は何が言いたかったのだろう。
0003nobodyさん2009/09/13(日) 20:51:01ID:???
O2
000412009/09/13(日) 20:53:14ID:???
■変遷
【Agile】Ruby on rails相談所【DRY】
http://pc8.2ch.net/test/read.cgi/php/1118663500/
【Agile】Ruby on rails相談所 part2【DRY】
http://pc10.2ch.net/test/read.cgi/php/1151254378/
【Ruby】Ruby on Rails Part3
http://pc11.2ch.net/test/read.cgi/php/1170760209/

↓ム板に

Ruby on Rails
http://pc11.2ch.net/test/read.cgi/tech/1191381506/

↓

Ruby on Rails のスレ が
http://pc11.2ch.net/test/read.cgi/php/1207425569/
↓
【Ruby】Ruby on Rails Part6
http://pc11.2ch.net/test/read.cgi/php/1224838013/
↓
【Ruby】Ruby on Rails Part7
http://pc11.2ch.net/test/read.cgi/php/1241100447/
↓
【Ruby】Ruby on Rails Part8
http://pc11.2ch.net/test/read.cgi/php/1252842574/
(イマココ)
000512009/09/13(日) 20:55:27ID:???
立てました。
ところで >>4 の変遷って、今後もいるのかな?

次スレを、いつ誰が立てることになるのかはわからないけど、
ちょっと疑問に思ったので今のうちに議論しておいたほうがいいかなと思いました。
0006nobodyさん2009/09/13(日) 21:03:45ID:???
>>1
乙であります。
0007nobodyさん2009/09/13(日) 21:09:03ID:???
前のスレで
rdocのview sourceが素晴らしい
と言ってる方がいましたが、これは何のことでしょうか?
0008nobodyさん2009/09/13(日) 21:09:51ID:???
>>5
> ところで >>4 の変遷って、今後もいるのかな?

個人的には前スレだけで十分
代わりに定番プラグイン一覧みたいなのが欲しいところ

> 次スレを、いつ誰が立てることになるのかはわからないけど、
> ちょっと疑問に思ったので今のうちに議論しておいたほうがいいかなと思いました。

>>950 が立てること、とかでいいじゃないか。
そういうルールもテンプレに含めておくべきだな。
0009nobodyさん2009/09/13(日) 21:21:19ID:???
自分も前スレだけで十分。
次スレは>>950が立てればいいと思う。
0010nobodyさん2009/09/13(日) 21:24:33ID:???
>>7
ドキュメントにソースがついているところじゃないかな?

俺はRailsのchmしか使ってないけど、メソッドのところ見ると、該当ソースが見れる。
これがえらく便利。

わがまま言えば、該当ソース内で他のメソッドクリックするとそのソースも見れる、みたいなのだともっといいんだろうけどねえ…。
chmジャム陸際な
0011nobodyさん2009/09/13(日) 22:18:58ID:???
980くらいでも大丈夫
0012nobodyさん2009/09/14(月) 00:54:13ID:???
名前付きルートにモデルインスタンスを渡すソースをよく見ます。

@entry = Entry.new(params[:entry])
redirect_to entry_url(@entry)

みたいな感じです。
ネットなどで調べると、名前付きルートentry_urlの引数はidしか渡せないようなのですが、
モデルインスタンスが渡された場合はインスタンスからidを取り出すなどの特別扱いをされるのでしょうか?
001352009/09/14(月) 02:08:24ID:???
>>8-9
わかりました。
0014nobodyさん2009/09/14(月) 05:36:47ID:???
>>12
> ネットなどで調べると、名前付きルートentry_urlの引数はidしか渡せない
ハッシュも渡せるYO!!
entry_url(:id => 10)

こういう、引数の色んな渡し方が可能なメソッドは大抵
is_a? とか respond_to? を使って実行時型チェックをやってるので、
その一環としてモデルオブジェクトからは id を取得するようになっているのだろう。

ソース追っかけたわけではないので推測だけど、、、
0015nobodyさん2009/09/14(月) 09:54:44ID:???
>>7
このやり方ってどうするんですか?

0016nobodyさん2009/09/14(月) 10:30:34ID:???
>>12
url_forのドキュメントとソースが参考になるのではないかと
0017nobodyさん2009/09/14(月) 10:39:09ID:???
>>15
rdoc --inline-source(-S)
0018nobodyさん2009/09/14(月) 10:44:29ID:???
>>15
>>1 にあるRailsの公式APIリファレンスや github でホスティングされている
gem の rdoc なんかはそうなっているから、そっちを参照したら?

ローカルのgemや自作ライブラリのドキュメントを生成するなら
ひとまず rdoc の使い方を覚え、gem server などでググる必要があると思われる。

でも自分はあんまりローカルgemのrdocは見ないなあ、大抵guthubの方を見る
0019nobodyさん2009/09/14(月) 18:24:50ID:???
railsだとrake doc:railsってコマンドでもドキュメント作れるけど、このコマンドはみんな使ってないの?
0020nobodyさん2009/09/14(月) 19:19:32ID:???
どんなコマンドがあるのかわからん
コマンド一覧表作ってくれんかな
0021nobodyさん2009/09/14(月) 20:11:48ID:???
>>20
rake --tasks
0022nobodyさん2009/09/14(月) 20:16:10ID:???
zsh だと
rake <Tab> でコメント付きのタスク一覧を補完候補として表示してくれたりする
0023nobodyさん2009/09/14(月) 20:43:56ID:???
DBの設計の質問なのですがrailsが絡むのでここで質問させてください。
webシステムでユーザーのテーブルを作りたいのですが、memberテーブル(一般ユーザー)とadminテーブル(管理者ユーザー)に分けて作ろうと思っています。
ただし名前やパスワードなど共通するカラムはuserテーブルに切り出します。

この時、userテーブルとmember&adminテーブルの関連はどのように作るべきでしょうか?
以下のように�@と�Aの二つ考えてみたのですが、どっちが良いのか分かりません。

�@memberテーブルとadminテーブルそれぞれにuser_idカラムを作り、memberとadminからuserを参照する。
�Auserテーブルにuser_id(memberテーブルのidまたはadminテーブルのidを格納する)とuser_type("member"または"admin"を格納する)を作り、userからmemberとadminを参照する。

3つのテーブルの関係を考えるとuserがmemberとadminの親になるのが自然なので�@の方が良いのかなと思うのですが、
�Aの方法だと、railsのポリモーフィック関連で3つのテーブルの関連付けができるため便利です。(�@だとuserとmember、userとadminを別々に関連付けするのでmemberとadminに関連性が無くなる)
どっちのやり方が適切でしょうか?
0024nobodyさん2009/09/14(月) 21:23:58ID:???
>>23
個人的には polymorphic associationが好み。

あまり美しくないが、一応選択肢として:
Rails的にはSTI(Single Table Inheritance)がお手軽。
0025nobodyさん2009/09/14(月) 22:06:40ID:???
3つ目の案として、UserとRoleの2つのモデルで一般ユーザ、管理者を表現するのはどうかな。
rolesテーブルには一般ユーザと管理者のレコードを入れて権限マスタとして使う。
で、usersテーブルにrole_idを持たせる。


0026252009/09/14(月) 22:08:23ID:???
あ、失礼。
>>23の�Aと同じだった。


0027232009/09/14(月) 22:13:49ID:???
>>24
やはりrailsの場合polymorphicが良いのですね。
Single Table Inheritanceは知りませんでした。少し調べてみたら�@でやる場合はすごく便利そう…validationもuserモデルに書くだけで良くなるからむしろ�Aより綺麗かも?
polymorphicかSTIかでもうちょっと考えてみます。
ありがとうございました。
0028232009/09/14(月) 22:16:12ID:???
>>25
ありがとうございます。
�Aとは違うような…3つテーブルを作らないということですよね?
0029nobodyさん2009/09/14(月) 22:18:10ID:???
Railsとか関係なしに�Aは駄目だろ
memberとadminを区別しないで扱いたい時とか破綻する
0030232009/09/14(月) 22:26:53ID:???
破綻しますか?�Aの場合でもuserからmemberとadminを辿れるから問題無いと思うけど。
0031nobodyさん2009/09/14(月) 22:44:58ID:0t6wUMUL
コントローラをあえてRESTfulにしたくない場合(フォーム→確認画面→完了画面、のようなものを考えています)、どのようにしたらよいでしょう?
config/routes.rb から該当コントローラの map.resources 行を削ると、以下のエラーになってしまいます。

 Showing app/views/hoges/fuga.html.erb where line #3 raised:
  undefined method `hoges_path' for #<ActionView::Base:0xb755f00c>
 Extracted source (around line #3):
  <% form_for(@hoge) do |f| %>

なお該当ビューで hoges_path メソッドを使用している箇所はありません。
0032nobodyさん2009/09/14(月) 23:03:43ID:???
>>31
form_forでエラーになっているのであれば、form_tag使えばいいんじゃない?

<% form_tag(:action => アクション名) do %>
 <%= text_field(:hoge, :name) %>
以下略
<% end %>
0033nobodyさん2009/09/15(火) 00:21:30ID:???
>>23
わざわざ二つに分ける意味がわからん
なぜ二つに分けようと考えたんだ?
0034nobodyさん2009/09/15(火) 00:22:25ID:???
メンバーから管理者に変更するときとか面倒そうだな
0035nobodyさん2009/09/15(火) 00:24:43ID:???
userテーブルは要らないな。memberテーブルとadminテーブルだけあれば済むこと。
0036232009/09/15(火) 02:04:52ID:???
何度もすいません。
memberテーブルとadminテーブルに分けたのは、一般ユーザーと管理者ユーザーで必要なカラムが違うからです。
userテーブルを作ったのは、ログイン認証の時に一つのテーブルを見るだけで済むようにするためです。
restful_authenticationなどのプラグインなどを使う場合ユーザー認証のテーブルが二つあるとやっかいだと思いました。

>>34さんが言うように変更が面倒くさそうなので、userテーブルだけ作ってmember固有のカラムもadmin固有のカラムもuserに突っ込むことも考えましたが、
そうしてしまうと今度はmemberとadmin以外の種類のuserが必要になった時に大変だと思いました。
自分なりに考えた結果、userとmemberとadminの3つのテーブルを用意するのがいいと判断しましたが、一般的なwebシステムではこういう分け方はあまりやらないのでしょうか。
0037nobodyさん2009/09/15(火) 03:06:36ID:AVq3Mqvr
この流れの中、恥を忍んで聞くのですが、個人で作ってるシステムで、
「管理者=自分」と「その他ユーザー」という区別しかない場合、
特定のID(例えば 1)を持つユーザーが管理者、とハードコードしてしまうのって
どうなんですかね?

role を導入しようかと思ったんですが、
管理者か否かの二値を区別するのに roleテーブルも大げさかなと
0038nobodyさん2009/09/15(火) 03:43:36ID:???
accessor isadmin
0039nobodyさん2009/09/15(火) 09:01:10ID:Gt2owe1a
>>37
role導入でいいと思う。今は2つの値しか扱わないとしても、ハードコーディングするより全然いい。
■ このスレッドは過去ログ倉庫に格納されています