ラベル Ruby の投稿を表示しています。 すべての投稿を表示
ラベル Ruby の投稿を表示しています。 すべての投稿を表示

2007年10月22日月曜日

collection_selectとユーザ一覧

新規ユーザーの登録でも部署名をプルダウンで選択させたい。

collection_select()
selectのなかでHashかArraysを使う

例:select (:artists, :name, @deadArtists)
は@deadArtistsにある全ての芸術家のドロップダウンリストを生成する。
deadArtistは値が@artists.nameに一致するか、それぞれチェックされる。
一致した場合、その芸術家が選択された状態のドロップダウンが生成される。



[/account_controller.rb]
def signup
@groups = Group.find(:all)
@user = User.new(params[:user])
return unless request.post?
@user.save!
self.current_user = @user
redirect_back_or_default(:controller => '/account', :action => 'list_group')
flash[:notice] = "Thanks for signing up!"
rescue ActiveRecord::RecordInvalid
render :action => 'index'
end



[signup.rhtml]

<label for="group_id">部署</label>
<%= collection_select(:groups, :group_id, @groups) %>





query文
Group Load (0.001989) SELECT * FROM groups



クエリはあっているようだけど

<エラー文> wrong number of arguments (3 for 5)

5個のとこが3個しかないっていわれてる?
だとすれば。。。プルダウンに入る値の設定かな?



<%= collection_select(:groups, :group_id, @groups, :id, :name) %>


<エラー文> undefined method `group_id' for #




そりゃそうだった!groups DBには :id と :name の2項目しかありません。



<%= collection_select(:groups, :id, @groups, :id, :name) %>



おお!ちゃんとプルダウンで部署名が表れました。

新規ユーザー登録してみると・・・(まだgroup_idのDBへの登録は設定してない)
あ。やっぱりどのグループにも登録されてない。
が、登録したユーザーでのログインは出来ました。
とりあえず、ユーザー一覧も作っておこう。・・・としたら、
上で書いている『どのグループにも登録されてない』おかげで
うまいこと表示されず、またまた遠回りをしてしまいましたが、
日に日に「ピン!」と来る回数は増えたのですが、
debugが上手に出来ず小さなミスで右往左往している気がします。

明日は、やりかけた、acts_as_authenticatedとは
で勉強しつつ、
authenticatedに無い新しい項目のDB登録を完成させたいです。

2007年10月17日水曜日

関連について

今日は、「Ruby on Rails 入門 -優しいRailsの育て方 」 p83〜 を勉強。
「1:多」の関連までやったところで、昨日から痛めている首が辛くなってしまい、
腰までひびいてきたので、早退をさせてもらいます。

すみません。

2007年10月2日火曜日

今日のまとめ 10/2

Railsをやろうと環境作りでちょっと戸惑いました。
コマンドプロンプトもある程度は使えるようにならなくてはー!

教本「Ruby on Rails入門」の"1-1 Rubyが初めてのひとの概要"を読み、
Javaでもず〜っと意識してきた"ハズの"オブジェクト指向が
分かりやすく載っていたので、再確認できたうえ、
Javaとの文法の違いが分かりました。・・・まだ覚えられませんが・・・
なにか目的がないとなかなか頭に入ってこない性格なので、
明日は 教本「はじめよう Ruby on Rails」に載っているスケジューラーか
何かひとつアプリを作ってみます。

前から欲しいと思っていた「シンプルな家計簿」でも、いいな〜
今晩少しRailsで作る家計簿などを検索してみようと思います。

Hashクラス

チュートリアルのHashクラスの項目に下記のように書かれていました。



ハッシュの項目の名前としては文字列が使われることが普通ですが、
やろうと思えばどんな種類のオブジェクトでも使うことができます。
(それが必要になるとはあまり思えませんが)、配列や他のハッシュだってOKです。


weirdHash = Hash.new

weirdHash[12] = 'モンキーズ'
weirdHash[[]] = 'からっぽ'
weirdHash[Time.new] = 'するなら今だ'



JavaでもいまいちHashは理解していなかったので、
教本「たのしいRuby」を読んで表示させてみた。

----------------------------------------------

weirdHash = Hash.new

weirdHash[12] = 'モンキーズ'
weirdHash[[]] = 'からっぽ'
weirdHash[Time.new] = 'するなら今だ'

weirdHash.each {|codeType, color|
puts codeType.to_s + ': ' + color.to_s
}

----------------------------------------------
  結  果

: からっぽ
Tue Oct 02 10:35:05 +0900 2007: するなら今だ
12: モンキーズ

----------------------------------------------

9. クラス

-----------------------------------------------------------------
 練習問題
• 生まれた年、月、そして日を順に訊いてそこから年齢を計算します。
そして、過ごしてきた誕生日それぞれに対して大きなおめでとう!を
プレゼントしましょう。
-----------------------------------------------------------------
puts '生まれた年は?'
year = gets.chomp

puts '生まれた月は?'
month = gets.chomp

puts '生まれた日は?'
day = gets.chomp

today = Date.today

age = today.year.to_i - year.to_i

puts age.to_s + "歳ですね"

-----------------------------------------------------------------

たぶん、練習問題の意味とは違うような気がしますが。
上記だと生まれ年だけ聞けば良いですもね。

.to_iと.to_sの使いわけに気づきました(おそい)
Javaと違って最初に変数の型を宣言しないから、
「today.year.to_i - year.to_i」としなければ
計算ができないのですねー

あと、Date::todayメソッドで"年-月-日"と取得したら
today.year/.month/.day と取り出せるのも便利ですね。

2007年10月1日月曜日

今日のまとめ

Ruby 練習問題をやり、
「sortメソッドを使わずに配列の中身をソートする」問題でつまずきました。
その後、なんだか乗れずに数字を英語に変換するプログラム(100なら one hundred)でも
ん〜いまいち・・・

-------------------------------

練習問題

• 10億(One billion)秒... (もし記録が残っているなら)あなたの生まれた 正確な時刻を見つけ、いつ10億秒歳になる(あるいはなった)のかを 計算してみなさい。そしてカレンダーに印をつけましょう。

-------------------------------

time = Time.mktime(1976, 8, 3, 10, 11)
puts "あなたの生まれた時"
puts time
bilSec = 1000000000
time = time + bilSec

puts "10億秒後は"
puts time

-------------------------------

上記プログラムはあっているのだろうか???
10億秒後の日付って・・・

Rubyを使って 練習問題

7. 配列とイテレータ

好きな数だけ単語の入力をしてもらい
(1行に1単語、最後はEnterだけの空行)、
アルファベット順に並べ変えて出力するような
プログラムを書いてみましょう

-----------------------------------------

ary =[]
elem=nil


puts 'なにか入力してください'

while elem != ''
  elem=gets.chomp
  ary<<elem
end

puts ary.sort

------------------------------

「elem=nil」と宣言し忘れRubyに何度か怒られた
「最後はEnterだけの空行」は・・・?「''」だけで良いんですね。
「.sort」は02さんが見つけてくれました。
はじめ「ary<<gets.chomp」としましたが、これだと改行しても配列表示してくれず、
上記のように変更してみたら成功!

Ruby学習 参考URL



□ プログラミング入門 - Rubyを使って -


□ 逆引きRuby


□ Ruby リファレンスマニュアル