tag:blogger.com,1999:blog-24040156558904170622024-03-14T15:35:53.202+09:00OJT日誌 -B-TECH 01 -B-TECH 01http://www.blogger.com/profile/17884848745649987479noreply@blogger.comBlogger21125tag:blogger.com,1999:blog-2404015655890417062.post-81150833213442861462007-10-24T17:47:00.000+09:002007-10-26T22:40:06.866+09:00今日も認証<a href="http://www.ruby-lang.org/ja/man/?cmd=view;name=trap%3A%3A%28%29%A4%C7%B2%F2%B7%E8%A4%B9%A4%EB%A4%E2%A4%CE">大文字で始まるメソッドの呼び出し</a><br /><br /><a href="http://www2.ruby-lang.org/ja/man/?cmd=view;name=Module">Module モジュールのクラス。</a><br /><br /><br />−−−−−−−−−−−<br /><a href="http://idm.s9.xrea.com/ratio/2007/09/18/000680.html#id_20e383ade382b0e382a4e383b3e8a681e6b1822fe588a4e588a5">■ ログイン要求/判別</a> <br /><br /> class HogeController<br /> include AutheticatedSystem<br /> before_filter :login_required<br /> ....<br /> end<br /><br />これだけである。<br />これで、HogeController配下のアクションでは全てログインが必要となる。<br />未ログイン状態でアクセスすると/account/loginにリダイレクトされ、<br />そこでログインすると元のアクションに戻ってくる。<br />−−−−−−−−−−−−<br /><br />とのことだけど、<br />AccountController・SchedulesController・ApplicationControllerの<br />3つとも指定しましたが・・・全然ログインを求められません。<br />キャッシュでも残っているのかな?と思い、<br />キャッシュの消去もしてみましたが;;<br />ただ、http://localhost:3000/ や<br />http://localhost:3000/account/ などのアクセスがlogin画面になっているのは・・・・<br />/config/routes.rbの中で下記のように指定したからですね。<br /><br />map.connect '', :controller => 'account', :action => 'login'<br />map.connect '/account/', :controller => 'account', :action => 'login'<br />map.connect '/schedules/', :controller => 'account', :action => 'login'<br /><br />同じ内容を3行って・・・<br />ApplicationControllerでbefore_filterが効けば必要ないのかな?<br /><br /><a href="http://wota.jp/ac/?date=0720">● 継承時の Filter</a><br /><br />>コントローラを継承している場合、親クラスのコントローラで定義された<br />>Filter が先に実行されます。<br />>また、Filter を評価した値(戻り値)が false である場合、<br />>その時点で Filter の適用は停止され、以降の Filter は実行されません。<br />>(これは継承とは無関係に Filter の特徴です)<br /><br />うーなぜfilterがかからないのか<br />全然分からない・・・・なにがいけないんだぁ<br /><br /><a href="http://wota.jp/ac/?date=20050725">● routes</a><br /><br />同じ内容3行でも良さそう。<br />でも、認証させたいコントローラーが多くなったらどうするのだろう?<br /><br />例えば<br />map.connect '/:controller/', :controller => 'account', :action => 'login'<br />など、色々当てずっぽうに入れて為してみましたが、<br /><br />http://localhost:3000/schedules/ にアクセスすると<br /><br /><エラー文> Unknown action<br />No action responded to login<br /><br />となってしまいます。<br />たぶん、schedulesにloginなんてアクション無いぞ。と言われている。<br /><br />どんな処理でエラーになっているか?<br /><br />Processing SchedulesController#login<br />Parameters: {"action"=>"login", "controller"=>"schedules"}<br /><br />ここが気になりますね。SchedulesControllerのloginにparamを<br />持っていってますね。やはり。<br /><br />しかし、http://localhost:3000/account/ にアクセスすると・・・<br /><br />Processing ApplicationController#index<br />Parameters: {}<br /><br />login画面が表示されるし、ApplicationControllerにプロセスしてる!<br />んんーーーー? これは、actionメソッドが同じだからぽい。<br /><br />Processing SchedulesController#month<br />Parameters: {"action"=>"month", "controller"=>"schedules"}<br /><br />でも、ApplicationControllerにはプロセスしていない。<br /><br />あー分からないので、とりあえず進んでいきます。<br />urlではaction名を指定すればログイン無しで入れます!<br /><br />・・・・・・・<br /><br />★明日-最終日-の課題★<br /><br />1.スケジュール新規登録でファイル添付をしていないとエラーが出るのを直す<br /><エラー文> NoMethodError in SchedulesController#create<br />undefined method `original_filename' for "":String<br />app/controllers/schedules_controller.rb:102:in `set_file_name'<br /><br />2.認証・・・<br /><br /><br />明日は、今までの振り返りプレゼンをして、<br />残り時間で上記の課題をやろうと思います。B-TECH 01http://www.blogger.com/profile/17884848745649987479noreply@blogger.com0tag:blogger.com,1999:blog-2404015655890417062.post-1243759321585129492007-10-23T17:49:00.000+09:002007-10-24T17:47:10.706+09:00signup画面さて。サインアップ画面のカスタマイズです。<br />acts_as_authenticatedで作ってくれるsignup.rhtmlの中は下記のように<br />書いてあります。<br /><%= error_messages_for :user %><br /><% form_for :user do |f| -%><br /><label for="login">name</label><br /><%= f.text_field :login %></p><br /><br />で、今回新規登録にもプルダウンで部署を選択できるようにするために<br />collection_selectで書いたのが、以下。<br /><label for="group_id">部署</label><br /><%= collection_select(:groups, :id, @groups, :id, :name) %></p><br />これでは、:userに放りこまれてません。<br />頭に「f.」を付ければ良い・・・わけありませんでした。<br /><br /><br />f.を頭に付けてみると、<br /><エラー文>undefined method `merge' for :name:Symbol と言われます。<br /><br />---------------------<br /><br />signup.rhtmlと_userForm.rhtmlの中身が同じような感じなのがよく分からない。<br />webブラウザに生成されたhtmlをみてみると、_userForm.rhtmlに書かれている<br /><br /><!--[form:user]--><br /><!-- all custom fields here --><br /><br /><label for="group_id">所属グループ</label><br /><select id="user_group_id" name="groups[id]"><br /><option value="1" selected="selected">総務</option><br /><option value="2">営業</option><br /><option value="3">開発</option></select><br /><br />のコメントが入っている。んーどこからどう調べていったら良いのか・・・<br />signup.rhtmlの頭に書いてある<% form_for :user do |f| -%>と<br />_userForm.rhtmlの頭の<!--[form:user]--><br />これは、signup.rhtmlも_userForm.rhtmlも:userモデルを・・・なんだろう?<br />どういう意味なのかな??<br /><br />*** :userモデル回りに関するformということだそうです ***<br /><br />---------------------<br /><br /><%= collection_select(:groups, :id, @groups, :id, :name) %><br />ここに大きな間違えが!<br /><select id="user_group_id" name="groups[id]"><br />ここにも大きな間違えが起こってました。<br /><br /><%= collection_select(:user, :group_id, @groups, :id, :name) %><br />とすれば<br /><select id="user_group_id" name="user[group_id]">となって、<br />新規登録で、DBにも部署名(group_id)が登録できました。<br /><br />さてさてあと2日・・・<br />最悪、エラーが出ないようにしたい・・・・汗<br /><br />やっぱりRubyを一通り勉強しないと、カスタマイズは出来ないなぁ。<br /><br /><br />■ <a href="http://www.tkrb.jp/guide/2007/10/ruby_on_rails_1.html">Ruby on Rails を使ってひとりでサービスを作ってみよう</a><br /><br />■ <a href="http://www.k-tanaka.net/unix/chmod.html">パーミッション(所有権)の変更 linux</a><br /><br />■ <a href="http://techno.hippy.jp/apidoc/classes/ActionView/Helpers/FormOptionsHelper.html#M000344">Module ActionView::Helpers::FormOptionsHelper</a>B-TECH 01http://www.blogger.com/profile/17884848745649987479noreply@blogger.com0tag:blogger.com,1999:blog-2404015655890417062.post-66360632742868057542007-10-22T17:49:00.000+09:002007-10-23T17:49:11.304+09:00collection_selectとユーザ一覧新規ユーザーの登録でも部署名をプルダウンで選択させたい。<br /><br />collection_select()<br /> <a href="http://techno.hippy.jp/rorwiki/?HowtoUseFormOptionHelpers">selectのなかでHashかArraysを使う</a><br /> <br />例:select (:artists, :name, @deadArtists)<br /> は@deadArtistsにある全ての芸術家のドロップダウンリストを生成する。<br /> deadArtistは値が@artists.nameに一致するか、それぞれチェックされる。<br /> 一致した場合、その芸術家が選択された状態のドロップダウンが生成される。<br /><br /><HR><br />[/account_controller.rb]<br />def signup<br /> @groups = Group.find(:all)<br /> @user = User.new(params[:user])<br /> return unless request.post?<br /> @user.save!<br /> self.current_user = @user<br /> redirect_back_or_default(:controller => '/account', :action => 'list_group') <br /> flash[:notice] = "Thanks for signing up!"<br /> rescue ActiveRecord::RecordInvalid<br /> render :action => 'index'<br />end<br /><br /><HR><br />[signup.rhtml]<br /><br /><label for="group_id">部署</label><br /><%= collection_select(:groups, :group_id, @groups) %></p><br /><br /><HR><br />query文<br />Group Load (0.001989) SELECT * FROM groups<br /><HR><br /><br />クエリはあっているようだけど<br /><br /><エラー文> wrong number of arguments (3 for 5)<br /><br />5個のとこが3個しかないっていわれてる?<br />だとすれば。。。プルダウンに入る値の設定かな?<br /><br /><HR><br /><pre><%= collection_select(:groups, :group_id, @groups, :id, :name) %></pre><br /><br /><エラー文> undefined method `group_id' for #<array:0xb69e2b98><br /><br /><HR><br /><br />そりゃそうだった!groups DBには :id と :name の2項目しかありません。<br /><br /><HR><br /><%= collection_select(:groups, :id, @groups, :id, :name) %><br /><HR><br /><br />おお!ちゃんとプルダウンで部署名が表れました。<br /><br />新規ユーザー登録してみると・・・(まだgroup_idのDBへの登録は設定してない)<br />あ。やっぱりどのグループにも登録されてない。<br />が、登録したユーザーでのログインは出来ました。<br />とりあえず、ユーザー一覧も作っておこう。・・・としたら、<br />上で書いている『どのグループにも登録されてない』おかげで<br />うまいこと表示されず、またまた遠回りをしてしまいましたが、<br />日に日に「ピン!」と来る回数は増えたのですが、<br />debugが上手に出来ず小さなミスで右往左往している気がします。<br /><br />明日は、やりかけた、<a href="http://idm.s9.xrea.com/ratio/2007/09/18/000680.html#id_20acts_as_authenticatede381a8e381af">acts_as_authenticatedとは<br /></a>で勉強しつつ、<br />authenticatedに無い新しい項目のDB登録を完成させたいです。B-TECH 01http://www.blogger.com/profile/17884848745649987479noreply@blogger.com0tag:blogger.com,1999:blog-2404015655890417062.post-75258859090537287872007-10-19T17:50:00.000+09:002007-10-22T17:49:48.889+09:00Viewとにらめっこ今日はViewについてさらに深く勉強して、<br />DBの関連についてもやっと「なるほど!」と分かった。<br />contorollerをさわり、AとBとCのデータベースにそれぞれに登録されている<br />学生名とか学校名とか出身地をViewにならべて表示出来た!<br /><br />さて、週明けにこれを仕上げるぞ〜〜<br /><br />早いもので週明けからはたった4日でOJTが終わります。<br />ん〜本当に早い!<br /><br /><HR><br /><h1>Listing students</h1><br /><br /><table><br /> <tr><br /> <% for column in Student.content_columns %><br /> <th><%= column.human_name %></th><br /> <% end %><br /> </tr><br /> -----------------------------------<br /> カラム名が入る<br /> -----------------------------------<br /> ■Studentとは<br /><br /> [student.rb]<br /><br /> class Student < ActiveRecord::Base<br /> belongs_to :school<br /> has_one :profile<br /> end<br /><br /> ■.content_columns()とは<br /> "_id" または "_count" で終わる全カラム、<br /> つまりプライマリ id と、単一テーブル継承に<br /> 使用されるカラムを全て取り除いた<br /> カラムオブジェクトの配列を返します。<br /> <br /> ■obj.human_name<br /> 英単語の頭を大文字に変換する。<br /> 日本語の場合不要。<br /> -----------------------------------<br /> <br /><% for student in @students %><br /> -----------------------------------<br /> ■@studentsとは<br /> <br /> [ students_controller.rb ]<br /><br /> def list<br /> @student_pages, @students =<br /> paginate :students, :per_page => 10<br /> end<br /> <br /> ▽paginate collection_id, options={}<br /><br /> 「ページ管理オブジェクト」,「オプションで指定した個数のインスタンスが入ってる」=<br /> paginate「第一引数 ARモデル(モデルクラスの複数形/対象とするテーブル名)」,「オプション」<br /> -----------------------------------<br /> <tr><br /> <% for column in Student.content_columns %><br /> <br /> <td><%=h student.send(column.name) %></td><br /> -----------------------------------<br /> DBの中に入っている値が出る。<br /> -----------------------------------<br /> ■send(name[, args ... ])<br /> オブジェクトのメソッド name を、引数に args を渡して呼び出し、<br /> メソッドの実行結果を返します。<br /> ブロック付きで呼ばれたときはブロックもそのまま引き渡します。<br /> メソッド名 name は文字列かSymbol です。<br /> <br /> ■obj.name<br /> オブジェクトのnameを返す。<br /> -----------------------------------<br /> <% end %><br /><br /> <td><%= link_to 'Show', :action => 'show', :id => student %></td><br /> <td><%= link_to 'Edit', :action => 'edit', :id => student %></td><br /> <td><%= link_to 'Destroy', { :action => 'destroy', :id => student },<br /> :confirm => 'Are you sure?', :method => :post %></td><br /> </tr><br /><% end %><br /></table><br /><br /><br />■ update(id, attributes)<br /><br />update は、複数のカラムを更新し、save します。<br /><br />update は find(id) して得られる AR オブジェクトに対して update_attributes(attributes) を行います。 update_attributes(attributes) は self.attributes = attributes して save します。戻り値は save の戻り値です。B-TECH 01http://www.blogger.com/profile/17884848745649987479noreply@blogger.com0tag:blogger.com,1999:blog-2404015655890417062.post-28605635318965035122007-10-18T18:15:00.000+09:002007-10-22T17:49:48.890+09:00データベースの関連について今日は、一日関連について勉強してましたが、<br />schoolデータベースと関連付けたはずの<br />students データベースのschool_idカラムがなぜかnilのまま!<br /><br />id | name |school_id<br />1 | 田中 | nil<br />2 | 中田 | nil<br />3 | 山田 | nil<br /><br />と、イライラ〜としながら<a href="http://blog.masuidrive.jp/articles/2006/02/25/ajax-book">Railsで作るAjax住所録</a>のサンプルソースなんかを<br />取り込んでいじってみたりしてましたが、<br />またしても完全な思い込み・・・・<br />関連づけても、school_idは自動で入ってくれるわけではないのですね。<br />ん〜 どうして思い込むのだろう?<br /><br />また、基本をすっ飛ばして触り始めたRailsだったので、<br />今日初めて .rhtml の中身をじっくり見てみました。<br />なんだかすこしずつ頭の中の「?」がほどけていってる気がします。<br />まだまだ「?」多いですけど。<br /><br /><hr /><br />SQLiteで間違えてカラムを追加しちゃった場合。<br />SQLite−カラムの削除方法。<br /><br /><a href="http://d.hatena.ne.jp/cesar/searchdiary?word=*%5Bsqlite%5D">テーブルそのものの操作方法(テーブル名変更・列の増減など)</a><br /><br /><hr /><br />sqlite> ALTER TABLE schools ADD COLUMN school_id integer;<br />sqlite> select * from schools;<br />id|name|school_id<br />1|工学院|<br /><br />sqlite> select * from students;<br />id|name|school_id<br />1|01|<br />2|02|<br />3|山田|<br /><br /><br />sqlite> BEGIN TRANSACTION;<br />sqlite> CREATE TEMPORARY TABLE schools_backup(id,name);<br />sqlite> INSERT INTO schools_backup SELECT id,name FROM schools;<br />sqlite> DROP TABLE schools;<br />sqlite> CREATE TABLE schools(id,name);<br />sqlite> INSERT INTO schools SELECT id,name FROM schools_backup;<br />sqlite> select * from schools;<br />id|name<br />1|工学院<br />sqlite> DROP TABLE schools_backup;<br />sqlite> commit;<br /><br /><hr />B-TECH 01http://www.blogger.com/profile/17884848745649987479noreply@blogger.com0tag:blogger.com,1999:blog-2404015655890417062.post-24269797502530105392007-10-17T14:16:00.000+09:002007-10-18T18:15:24.242+09:00関連について今日は、「Ruby on Rails 入門 -優しいRailsの育て方 」 p83〜 を勉強。<br />「1:多」の関連までやったところで、昨日から痛めている首が辛くなってしまい、<br />腰までひびいてきたので、早退をさせてもらいます。<br /><br />すみません。B-TECH 01http://www.blogger.com/profile/17884848745649987479noreply@blogger.com0tag:blogger.com,1999:blog-2404015655890417062.post-28862167977913987892007-10-16T17:54:00.000+09:002007-10-17T10:22:47.503+09:00Aptanaでacts_as_authenticatedacts_as_authenticatedを分かる範囲で調べたところ<br />script/generate authenticated user account してからmigrateする。<br />と書いてあるけど、今回は「user」というモデルと「account」という<br />コントローラーが既にあるので、プラグインすることで<br />今まで作ったファイルが上書きされちゃわないかの確認。<br /><br />「実際には変更しない = -p, --pretend」オプションで走らせてみる。<br />/*Aptanaの「Generator」ではうまく動かなかったので、プロンプトで<br /> script/generate authenticated user account を実行*/<br /><br />overwrite app/models/user.rb? [Ynaqd]<br />overwrite app/controllers/account_controller.rb? [Ynaqd]<br />overwrite test/functional/account_controller_test.rb? [Ynaqd]<br />overwrite app/helpers/account_helper.rb? [Ynaqd]<br />overwrite test/unit/user_test.rb? [Ynaqd]<br />overwrite test/fixtures/users.yml? [Ynaqd]<br /><br />計6つのファイルが上書きされてしまう模様なので、<br />別フォルダを作って上記6つのファイルを移動させておく。<br /><br />-pオプションなしで実行。<br /><br /><hr /><br /><br /> exists app/models/<br /> exists app/controllers/<br /> exists app/helpers/<br /> exists app/views/account<br /> exists test/functional/<br /> exists test/unit/<br /> create app/models/user.rb<br /> create app/controllers/account_controller.rb<br />identical lib/authenticated_system.rb<br />identical lib/authenticated_test_helper.rb<br /> create test/functional/account_controller_test.rb<br /> create app/helpers/account_helper.rb<br /> create test/unit/user_test.rb<br /> create test/fixtures/users.yml<br />identical app/views/account/index.rhtml<br />identical app/views/account/login.rhtml<br />identical app/views/account/signup.rhtml<br /> exists db/migrate<br /><span style="color: rgb(255, 0, 0);">Another migration is already named create_users: db/migrate/004_create_users.rb</span><br /><br /><hr /><br /><br />で、できた。が。んん?見落としていたけど、最後の行は−pの時も出ていた。<br />User modelを作った時に出来たmigrateスクリプトも移動しておかなきゃ<br />いけなかったんですね。たぶん。<br />移動させて、もう一度authenticatedしたら、新たにdb/migrate/004_create_users.rbが<br />出来ました。中身を見てみると・・・<br /><br /><hr /><br /><br />class CreateUsers < force =""> true do |t|<br /> t.column :login, :string<br /> t.column :email, :string<br /> t.column :crypted_password, :string, :limit => 40<br /> t.column :salt, :string, :limit => 40<br /> t.column :created_at, :datetime<br /> t.column :updated_at, :datetime<br /> t.column :remember_token, :string<br /> t.column :remember_token_expires_at, :datetime<br /> end<br />end<br /><br />def self.down<br /> drop_table "users"<br />end<br />end<br /><hr /><br />うわー高機能ですね。<br /><br />さて、ここで問題が。以前に作ったUsersテーブルはどうすればいいのか?<br /><br />もともと作っていたuserテーブルの中身は、:group_idと:nameだけなので、<br />group.rb は has_many :users のまま、新しい user.rb に belongs_to :group してもう。<br /><br /><hr /> [ /model/user.rb ]<br /><br />require 'digest/sha1'<br />class User <><br /> [ /controller/account_controller.rb ]<br /><br />(略)<br /><br />def logout<br /> self.current_user.forget_me if logged_in?<br /> cookies.delete :auth_token<br /> reset_session<br /> flash[:notice] = "You have been logged out."<br /> redirect_back_or_default(:controller => '/schedules', :action => 'month')<br />end<br /><br />の後ろに、昨日までに作ったaccount_controller.rbの内容を<br />とりあえずドバっとコピペしてみたら、ユーザー管理からログインした後に<br />グループ一覧へ行けるようになり、グループについては新規追加/削除/編集が出来た。<br />ログアウトも出来る!<br />・・・・と、一通り喜んでみたものの、まだDBは何も触ってません。<br />ので、明日はDBを:includeや:has_manyなどを使って作ろうと思ってます。B-TECH 01http://www.blogger.com/profile/17884848745649987479noreply@blogger.com0tag:blogger.com,1999:blog-2404015655890417062.post-18027614263175578452007-10-15T17:54:00.000+09:002007-10-16T10:13:21.408+09:00スケジューラー 明日はLog in先週の『Parameterの"id"が"update"になる謎。』はやはり単純なミス<br /><%= start_form_tag({:action => 'update'<span style="color: rgb(0, 0, 153);">, :id => @schedule</span>}, :multipart => true) %><br />引数で<span style="color: rgb(0, 0, 153);"> :id => @schedule </span>の指定を忘れていました。<br /><br />さて、次のエラーは。<br /><hr /><br />NameError in SchedulesController#create<br />uninitialized constant FILE_PATH<br /><br />/1.8/gems/activesupport-1.4.3/lib/active_support/dependencies.rb:266:in `load_missing_constant'<br />/1.8/gems/activesupport-1.4.3/lib/active_support/dependencies.rb:452:in `const_missing'<br />/1.8/gems/activesupport-1.4.3/lib/active_support/dependencies.rb:464:in `const_missing'<br /><br /><hr /><br /><br /><a href="http://rubyist.g.hatena.ne.jp/keyword/const_missing">const_missing</a><br />>定義されていない定数を参照したときに Ruby がこのメソッドを呼びます。<br />>参照した定数名の Symbol が引数に渡されます。<br />>デフォルトではこのメソッドは例外 NameError を発生させます。<br /><br />こちらもケアレスミス。複数名の定数を呼び出すところを単数名で呼んでいた。<br />ボンミスは良くしますが、今日はちょっと多すぎて自分でも嫌になるなぁ。<br />風邪のせいとは言えませんが(言ってるw) ぼ〜っとしすぎです。<br /><br />その後もケアレ・スミス氏と格闘して、「ログイン機能」の追加までたどり着きました。<br />教本ではLoginGeneratorを使っているのですが、もう古く、<br />現在 認証系を作る場合は『Acts as Authenticated』を使用するとのことで、<br />とりあえずPluginはインストールしておいたので・・・<br />明日は Acts as Authenticated を調べながら自分でやってみようと思います。<br /><br /><br />□明日のための参考サイト<br /><br /><a href="http://technoweenie.stikipad.com/plugins/show/Acts+as+Authenticated">[本家] Acts as Authenticated</a><br /><a href="http://www.negisio.net/?p=28"><br />Ruby on Rails: ログイン機能を作る (acts as authenticated 編)</a><br /><a href="http://yumenoyouna.jugem.jp/?eid=130"><br />Acts as Authenticatedまとめ</a><br /><br /><a href="http://d.hatena.ne.jp/kusakari/20070724">Acts as Authenticated plugin を少しだけセキュアにする</a><br /><br /><a href="http://blog.japan.zdnet.com/yoshimi/">あとで読むRailsのススメ acts_as_authenticated</a>B-TECH 01http://www.blogger.com/profile/17884848745649987479noreply@blogger.com0tag:blogger.com,1999:blog-2404015655890417062.post-21553160456914401242007-10-12T18:15:00.000+09:002007-10-15T17:59:44.202+09:00スケジューラー 続き教本を進めていくと、月間表示を作成したので<br />「scaffoldで生成されたlist.rhtmを削除する」と言う項目に従って<br />list.rhtmlを消すと、エントリを削除できるリンクが無くなってしまった。<br />教本では後々付け加えるのかもしれないけれど、ちょっと挑戦してみようと思って作業を始める。<br /><br />まずはedit.rhtmlに<br /><hr /><br /><% form_tag :action => 'destroy', :id => @schedule do %><br /><%= submit_tag '削 除' %><br /><% end %><br /><br /><hr /><br />としてみると。簡単に削除ができた。<br />「削除しますか?」の確認画面が欲しいと思い:confirmを使うためlink_toにして<br />(最初はform_tagに入れようとしていたけど、うまくいかなかった)<br /><br /><hr /><br /><%= link_to("Destroy",{ :action => "destroy", :id => @schedule }, :confirm => "Are you sure you want to delete this entry?", :post => true %><br /><br /><hr /><br />と追加してみる。ヨシ、できた。<br /><br />「Are you sure you want to delete this entry?」にタイトルを入れたくなった。<br /><span style="color: rgb(102, 51, 102);">:confirm => "『 タイトル:#{@schedule.title} 』のエントリを削除しますか?"</span><br />でOKだった。<br /><br /><hr /><br />private<br />def set_file_name<br /> @file = params[:schedule][:file_name]<br /> params[:schedule][:file_name] = @file.original_filename<br />end<br /><br /><hr /><br /><br />の部分でoriginal_filenameが見付からないというエラーが出たが、<br />start_form_tagの書き方が教本の頃より変わったらしい。<br /><br /><span style="color: rgb(102, 51, 102);"><%= start_form_tag('create', :multipart => true) %></span><br />と書き直してOK。<br /><br />次はなぜか<br />Parameterの"id"が"update"になる謎。<br /><br /><hr />ActiveRecord::RecordNotFound in SchedulesController#edit<br />Couldn't find Schedule with ID=update<br /><br />workspace/scheduler/app/controllers/schedules_controller.rb:80:in `find_schedule'<hr /><br /><br />で止まっているし、idに"update"が入るというのはスクリプトの打ち間違えかな<br />週明けに格闘してみようと思います。<br /><br /><br /><br />□ <a href="http://www.atmarkit.co.jp/fjava/special/javvsaror/ror01.html">Javaから見たRuby on Rails</a>B-TECH 01http://www.blogger.com/profile/17884848745649987479noreply@blogger.com0tag:blogger.com,1999:blog-2404015655890417062.post-91456011425867555382007-10-11T17:55:00.000+09:002007-10-12T10:14:32.248+09:00db:migrate文字化けはとりあえずDBの作り直しが良いだろうと思ったので作りなおしてみると<br />db:migrate実行時に<br /><br /><hr /><br />/ruby/gems/1.8/gems/activerecord/lib/active_record/vendor/mysql.rb:523:in `read'<br />rake aborted!<br /><hr /><br />42000だけど、以前のエラーとはちょっと違うみたい。<br /><br />>'scheduler_development' なんてデータベースは知りません.<br />って。知らないだろう。<br />だって、db:migrateで作ってくれるんじゃないの!?<br />ということで、ググり<br /><br /><a href="http://beginningrails.com/2007/8/14/unknown-database-bug-in-chapter-2">Unknown database bug in Chapter 2 1</a><br /><br />>Creating the database is perhaps the easiest way to go.<br /><br />そうですか。やはり。なんだか腑に落ちないけど。<br />MySQLでcreateして、問題なくdb:migrateできました。<br />そして、昨日悩まされていたDBの文字化けについても完治です!<br /><br /><span style="color: rgb(51, 51, 255);">----- db:migrate についての理解不足でした。</span><br /><span style="color: rgb(51, 51, 255);">データベースを先に作っておかないと、db:migrateもできないのですね。</span><br /><span style="color: rgb(51, 51, 255);">はい。</span> <br /><br /><br />CalendarHelperを使って、なんとかカレンダー表示までたどり着きました。<br />途中、『 app/controllers/schedules_controller.rb 』に<br />月を表示させる為のメソッド"month"を作る際に<br />何も考えず一番最後に追加してしまい、なかなか表示ができませんでしたが、<br />カレンダー表示をする際にどこまでメソッドを呼び出しているのか<br />今いち分からないので、とりあえず頭に追加することで解決。<br /><br />・・・index,list,show,new,creat,edit,updateにmonthを追加するのに<br />頭もケツもあまり関係ないように思えるが、どこが作用しているのかな??<br /><br />CSSも設置して、とりあえず形になってきたので<br />やっと面白くなってきました!!B-TECH 01http://www.blogger.com/profile/17884848745649987479noreply@blogger.com0tag:blogger.com,1999:blog-2404015655890417062.post-70049063490959114932007-10-10T18:01:00.000+09:002007-10-16T10:10:46.056+09:00テーブルが作れるようになった・・・先週からの続き。MySQLのデータベース権限を指定してあげることでrake db:migrateにて<br />テーブルが作れるようになった・・・先週からの続き。<br />スケジューラーのチュートリアルを完成させようと思います。<br /><br />が、scaffoldでMVCを構築してもらい、「 $ rake 」でテストをしたら<br />出ました エラー ・・・ 涙<br /><br /><hr /><br /><br />$ rake<br />(in /home/b-tech01/scheduler)<br />/usr/bin/ruby1.8 -Ilib:test "/usr/lib/ruby/1.8/rake/rake_test_loader.rb" "test/unit/schedule_test.rb"<br />Loaded suite /usr/lib/ruby/1.8/rake/rake_test_loader<br />Started<br />.<br />Finished in 0.051288 seconds.<br /><br />1 tests, 1 assertions, 0 failures, 0 errors<br />/usr/bin/ruby1.8 -Ilib:test "/usr/lib/ruby/1.8/rake/rake_test_loader.rb" "test/functional/schedules_controller_test.rb"<br />Loaded suite /usr/lib/ruby/1.8/rake/rake_test_loader<br />Started<br />EEEEEEEE<br />Finished in 0.066953 seconds.<br /><br /> 1) Error:<br />test_create(SchedulesControllerTest):<br />StandardError: No fixture with name 'first' found for table 'schedules'<br /> /home/b-tech01/scheduler/config/../vendor/rails/activerecord/lib/active_record/fixtures.rb:489:in `schedules'<br /> ./test/functional/schedules_controller_test.rb:15:in `setup_without_fixtures'<br /> /home/b-tech01/scheduler/config/../vendor/rails/activerecord/lib/active_record/fixtures.rb:562:in `setup'<br /><br /> −−−− 略 −−−− 同じエラーが8つ −−−−<br /> <br />8 tests, 0 assertions, 0 failures, 8 errors<br />/usr/bin/ruby1.8 -Ilib:test "/usr/lib/ruby/1.8/rake/rake_test_loader.rb"<br />rake aborted!<br />Test failures<br /><br /><hr /><br /><br />エラーで該当している箇所を見ても、もちろん追いきれなかったので、<br />『StandardError: No fixture with name 'first'』をググってみた。<br /><br /><a href="http://www.lab.keiken.co.jp/xoops/modules/pukiwiki/146.html">Railsのテストが通らない場合</a><br /><br /><br />上記URLの " その一 " を実行したら 即、解決! <br /><br />> scaffoldを利用した場合、test/fixturesフォルダにfixtureされるymlファイルが生成されます。<br />> が、なぜかこのファイル内に :firstがうめこまれていないのです。それなのにテストコードのほうは<br />><br />> @first_id = hogehoges(:first).id<br />><br />> で、:firstを探しにいっているので見つからずにエラーになるわけです。不思議ですねぇ<br /><br />本当に、不思議ですねぇ。<br />無事表示ができるようになったところで教本の通り、<br />『一覧表示画面のカスタマイズ』をしてみます。<br /><br />まず最初のエラーは、簡単なsyntax error<br />schedules_controller.rbに追記する際に「 , 」を忘れていた。<br /><br />そして次。<br />テスト用のデータベースにデータを入れるため/test/fixtures/schedules.ymlに<br /><br /><hr /><br /><br />schedule1:<br />id: 1 <br /> datetime: 2007-10-10 12:00<br /> title: 勉強1<br /> content: 今日も勉強1<br />schedule2:<br /> id: 2<br /> datetime: 2007-10-11 12:00<br /> title: 勉強2<br /> content: 今日も勉強2<br /><br /><hr /><br /><br />と記述するものの、やはりエラーーーー<br /><br />Fixture::FormatError: ../test/fixtures/schedules.yml. Please note that YAML must be consistently indented using spaces. Tabs are not allowed.<br /><br />ArgumentError: syntax error on line 3, col 10: ` datetime: 2007-11-11 12:43:00'<br /><br />tabは使ってないから大丈夫。・・・と思っていたら、<br />記述した「 id: 1 」の前にスペースを入れ忘れていた・・・<br /><br /><hr /><br /><br />schedule1:<br />id: 1 <span style="color: rgb(255, 0, 0);">←←← スペースが入ってない!</span><br /> datetime: 2007-10-10 12:00<br /> title: 勉強1<br /> content: 今日も勉強1<br /><br /><hr /><br /><br />このケアレスミス、一人だったらほぼ気づけないと思う(汗<br /><br /><br />そして、現在MySQLの日本語文字化けと格闘中。<br /><br /><a href="http://wota.jp/ac/?date=20061011">● [MySQL] 文字化け問題を本気で直す</a><br /><br />を参考にしてみるが、現在もまだ文字化け「????」中。<br />SQLite3にして先に進んだ方が良いかなぁ・・・とは思いつつも<br />MySQLでやってみてエラーをたくさん経験して、今のうちに<br />自分が弱いところなどを知るのも良いかと思ってます。<br /><br />でも、明日で最後にするつもりです・・・<br />さきほどまでコマンドプロンプトで作っていたプロジェクトを<br />Aptanaにインポートしてやっていて、rakeフォルダの中にrakeフォルダ・・・<br />と意味の分からないことになっていたのが気になっていたので、<br />Aptanaで最初から同じところまで作ってrakeでテストしました。<br /><br />・・・が、やはり文字化けしてました。<br /><br />今日はここまでで、明日頑張ります。<br />でも、Aptanaの使いかたが分かりつつあるので<br />無駄ではない!ハズ・・・B-TECH 01http://www.blogger.com/profile/17884848745649987479noreply@blogger.com0tag:blogger.com,1999:blog-2404015655890417062.post-13427817091094004732007-10-04T17:04:00.000+09:002007-10-04T17:11:48.664+09:00No such file or directory - /tmp/mysql.sockについてちょっと視点を変えて下記を試してみましたが<br /><br />・/var/run/mysqld/mysqld.sock のリンクを作成して mysql.sock とリンク名を変更<br />・RoRで作りかけアプリの中 /scheduler/tmp に放りこんでみる<br />・/scheduler/config/database.ymlに昨日追加した<br />「socket: /var/run/mysqld/mysqld.sock」の一文を削除<br />・$ rake db:migrate を実行してみる。<br /><br />→ やっぱりダメ!<br /><br />database.ymlをもう一度見てみる。<br />コメントには「MySQLのバージョンは4.0と5.0がお勧め」って書いてある。<br />バージョンは 5.0.38 だから問題なさそう。<br /><br />database.ymlの socket: 指示を消すと rake はどこから<br />「/tmp/mysql.sock」だと命令されているのか?<br /><br /><br />ググってみると<br /><a href="http://dev.rakusui.jp/diary/?date=20041213#p03">☆ MySQLのソケットの位置はどうやって指定する?</a><br /><br /> > 1. 引数<br /> > 2. 環境変数 MYSQL_UNIX_PORT<br /> > 3. デフォルト値 /tmp/mysql.sock<br /> > の順でソケットの位置を見ていることがわかった。<br /><br />だから、やっぱり、scheduler/config/database.ymlに<br />「socket: /var/run/mysqld/mysqld.sock」って追加すればいいのでは??<br />ううう。<br /><br /><a href="http://www.recyclon.com/faq/2005/11/ruby_on_rails_mysql_no_such_fi.html">自分的 FAQ (よくある質問とその回答)</a><br />今までやっていたことと同じような感じですが、<br /><br />>4.WEBrick を再起動<br /><br />これが気になります。<br /><br />□WEBrick 起動コマンド<br />$ ruby ./script/server<br /><br />http://localhost:3000/確認。<br />問題なく立ち上がってます。<br /><br />もう一度<br /><br /><hr /><br />$ rake db:migrate<br />(in /home/b-tech01/scheduler)<br />rake aborted!<br />#42000 Access denied for user 'rails'@'localhost' to database 'scheduler_development'<br /><br /><hr /><br /><br />あー やっとエラーの内容が変わりました!<br />たぶん、socketは通った(?)<br />次はMySQLのエラーが〜<br /><br /><a href="http://yukaigi.com/ppt/archives/2007/04/mysql42000acces.html">MySQLの「#42000Access denied for user ''@'localhost' to database 'sample'」というエラー</a><br /><br /><br />>「grant」文で、作ったデータベースで、ユーザー「recipe3」に<br />>アクセス権減を与える訳ですが、僕はここの「recipe3@localhost;」という<br />>箇所をチュートリアルのままやっていたので「recipe@localhost;」としたままでした。<br />との一文・・・で、どう解決されたのだろう・・・<br /><br />私もチュートリアルの言うままdatabase.ymlを<br /><br />adapter: mysql<br />database: scheduler_development<br />username: rails<br />password:<br />host: localhost<br />encoding: utf8<br />socket: /var/run/mysqld/mysqld.sock<br /><br />としたのですが、「'rails'@'localhost'」でエラーが出ているということは<br />アクセス権の問題?まだテーブル作ってませんが・・・<br /><br /><a href="http://jp.rubyist.net/magazine/?0005-RubyOnRails">RubyOnRails を使ってみる 【第 2 回】 (続・RubyOnRails を使ってみる)</a><br />データベースの設定<br /><br /><span style="font-weight: bold; color: rgb(255, 0, 0);">↑ここに答えがありました!!!!</span><br /><br />rails@localhost がscheduler_developmentとscheduler_testを<br />扱えるように下記Queryを実行<br /><br /><hr /><br />mysql> grant all on scheduler_development.* to rails@localhost;<br />Query OK, 0 rows affected (0.04 sec)<br /><br />mysql> grant all on scheduler_test.* to rails@localhost;<br />Query OK, 0 rows affected (0.00 sec)<br /><br /><hr />WEBrickをおまじないのように再起動<br /><hr /><br />$ rake db:migrate<br />(in /home/b-tech01/scheduler)<br />== CreateSchedulers: migrating ================================================<br />-- create_table(:schedules)<br /> -> 0.0647s<br />== CreateSchedulers: migrated (0.0651s) =======================================<br /><br /><hr /><br />mysql> show tables;<br />+---------------------------------+<br />| Tables_in_scheduler_development |<br />+---------------------------------+<br />| schedules |<br />| schema_info |<br />+---------------------------------+<br />2 rows in set (0.00 sec)<br /><br /><hr /><br />できたーーーーーーーーー!!<br /><br />高級?なMySQLではちゃんとデータベースごとにユーザ設定をしてあげなければ<br />ならないということでした。<br />はぁ〜〜長かった・・・B-TECH 01http://www.blogger.com/profile/17884848745649987479noreply@blogger.com0tag:blogger.com,1999:blog-2404015655890417062.post-24918427215567996502007-10-04T11:33:00.000+09:002007-10-04T12:27:02.319+09:00Install Aptana to ubuntu --- 続きAptanaでRadRailsが表示されない現象について、<br />情報をいただきました。<br />お恥ずかしいことに、Javaのバージョン確認を見逃していました。<br /><br />>原因:Javaのバージョンが1.4のまま<br />><br />> * 参考<br />> o Aptana Forums :: View topic - FAQ - Please read first<br />> o http://www.aptana.com/forums/viewtopic.php?t=2102<br />><br />>対応:Javaの5.0(1.5)をインストール <br /><br />まずはバージョンを確認。<br /><br />-------------------------------------------<br />-------------------------------------------<br /><br />$ java -version<br />java version "1.4.2"<br />gij (GNU libgcj) version 4.1.2 (Ubuntu 4.1.2-0ubuntu5)<br /><br />-------------------------------------------<br />-------------------------------------------<br /><br />1.4.2でした!なるほど・・・<br /><br />$ sudo aptitude install sun-java5-jdk<br />インストール終了後<br /><br />> cd /usr/bin<br />> sudo mv java java_1.4<br />> sudo ln -s /usr/lib/jvm/java-1.5.0-sun/bin/java java<br /><br />教えられた通りにやってみると、<br />java version "1.5.0_11"<br />になりました!<br /><br />以前にRubyもRakeも入れたハズ・・・確認してみると<br /><br />cd /usr/share/doc/r<br />radeontool/ readahead/ rss-glx/<br />rails/ readline-common/ rsync/<br />rake/ reiserfsprogs/ ruby/<br />rdesktop/ restricted-manager/ ruby1.8/<br />rdoc/ rhythmbox/ <br />rdoc1.8/ rpm/ <br /><br />入っているので、Aptanaを起動してみると・・・<br />Radrailsが入りましたーー!<a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/_g-qMIDOvU4c/RwRTBeKS36I/AAAAAAAAAAM/g61nLu95ZHA/s1600-h/radrails.jpg"><img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://bp1.blogger.com/_g-qMIDOvU4c/RwRTBeKS36I/AAAAAAAAAAM/g61nLu95ZHA/s320/radrails.jpg" alt="" id="BLOGGER_PHOTO_ID_5117306361340944290" border="0" /></a><br /><br />Javaバージョンなんて、最初に確認しないとだめですよね・・・<br /><br />AptanaにRadRailsが入ってくれたので、<br />昨日プロンプトで作りかけていたschedulerプロジェクトをインポートしてみました。<br /><br />ちょっと気になる感じではありましたが、<br />インポートも完了。<br />これから教本見つつAptanaで開発していこうと思います。<br /><br />その前に、昨日のmigrateの<span style="color: rgb(255, 0, 0);">No such file or directory - /tmp/mysql.sock</span>ってとこの問題を<br />解決しなければ・・・・B-TECH 01http://www.blogger.com/profile/17884848745649987479noreply@blogger.com0tag:blogger.com,1999:blog-2404015655890417062.post-72245050993825931462007-10-03T17:37:00.000+09:002007-10-04T10:23:17.999+09:00RoR チュートリアル結局、とにかくなにかアプリが作りたい!と思い、<br />『はじめよう Ruby on Rails』を見ながらコマンドプロンプトで<br />スケジューラーを作成し始める!! 16時すぎから・・・ (>_<) 本の言う通りに設定を済ませ、データベースも作り、 サクサクサクサク進んで喜んでいたら、「5-1 データベースの設計」で rake を使ってテーブルを作ろうとしたら・・・・出ましたエラー <br /><br />---------------------------------------<br /><br />$ rake db:migrate<br />(in /home/b-tech01/scheduler)<br />rake aborted!<br /><span style="color: rgb(255, 0, 0);">No such file or directory - /tmp/mysql.sock</span><br /><br />---------------------------------------<br /><br />はい。実際 /tmp/ の中身は空っぽでした。<br /><br />が、ググったらすぐにみつかりました。<br /><br /><a href="http://fg-180.katamayu.net/archives/2005/08/25/185402">/tmp/mysql.sockが見つからないって言われた</a><br /><br />調べてみると<br /><br /><br />---------------------------------------<br /><br />sudo mysqladmin version<br />mysqladmin Ver 8.41 Distrib 5.0.38, for pc-linux-gnu on i486<br />Copyright (C) 2000-2006 MySQL AB<br />This software comes with ABSOLUTELY NO WARRANTY. This is free software,<br />and you are welcome to modify and redistribute it under the GPL license<br /><br />Server version 5.0.38-Ubuntu_0ubuntu1-log<br />Protocol version 10<br />Connection Localhost via UNIX socket<br /><span style="color: rgb(255, 0, 0);">UNIX socket /var/run/mysqld/mysqld.sock</span><br />Uptime: 4 hours 44 min 23 sec<br /><br />---------------------------------------<br /><br />config/database.ymlに socket: /var/run/mysqld/mysqld.sock と書いてみる。<br /><br /><br />・・・・<br /><br />---------------------------------------<br /><br />$ rake db:migrate<br />rake aborted!<br />No Rakefile found (looking for: rakefile, Rakefile, rakefile.rb, Rakefile.rb)<br />/usr/lib/ruby/1.8/rake.rb:1822:in `load_rakefile'<br />(See full trace by running task with --trace)<br /><br />---------------------------------------<br /><br />だめじゃ〜ん・・・<br /><br />ついでに、 /var/lib/mysql/mysql.sock も試してみるがダメでした。<br />今日はここで時間がきてしまいました。<br />明日、引き続き頑張ってみます。<br />うううう・・・・B-TECH 01http://www.blogger.com/profile/17884848745649987479noreply@blogger.com0tag:blogger.com,1999:blog-2404015655890417062.post-46822083188161993912007-10-03T10:28:00.000+09:002007-10-03T15:59:19.523+09:00Install Aptana to ubuntu□ 参考HP<br />・<a href="http://linuxsalad.blogspot.com/2007/09/aptanaweb.html">AptanaでWebプロジェクトを開発・管理する</a><br />・<a href="http://d.hatena.ne.jp/kurohige2/">Ubuntu素人日記</a><br />・<a href="http://www.jitaku-server.net/apt_get_basic.html">apt-getの使いかた</a><br />・<a href="http://d.hatena.ne.jp/don007/20070411">don007の日記 [Mac][開発環境]Eclipseインストール</a><br />・<a href="http://labs.unoh.net/2006/08/ide_eclipse_aptana_trustudio.html">最強のIDEを追い求める Eclipse + Aptana + TruStudio (+RadRails)</a><br />・<a href="http://www5f.biglobe.ne.jp/%7Ejess/index.html">本気でRailsでアプリを作る</a><br /><br />□ <a href="http://www.aptana.com/">Aptana</a><br /><br />□ 今日覚えた便利なコマンド<br /><span style="color: rgb(255, 0, 0);">sudo nautilus</span> − root権限でGUI操作ができる!・・・結局GUI操作・・・<br /><br /><br />Linux用Aptanaはインストーラーが用意されていないので、<br /><s>まずは Milestone Release 9 (Stable: Build 17048) のzipをダウンロード。<br /><a href="http://linuxsalad.blogspot.com/2007/09/aptanaweb.html">AptanaでWebプロジェクトを開発・管理する</a>を参考にして難なくインストール終了!<br /><br />更新マネージャーで必要そうなものを更新して、<br />「Aptana RadRails」もインストールしました。<br />これからアプリ制作に取りかかってみます。</s><br /><br />↑<br />上の日誌を書いたのは午前11時ごろ・・・現在15時すぎました<br />なにがどうしてかが分からないのですがAptanaにRadRailsが入っていない!<br />プラグインを入れたはずなのに!!ど〜して?<br />・・・・・・ ということで調べた結果の私の予想では、<br /><br /><span style="color: rgb(255, 102, 0);">1 『Eclipse3.1.2にAptana含めRradRailsもプラグインで追加していく』</span><br /><span style="font-size:85%;"> 噂1)重いらしい <br /> 噂2)Eclipse3.2ではAptana の一部機能が使えない</span><br /><br /> OR<br /><br /><span style="color: rgb(255, 102, 0);">2 『<a style="color: rgb(255, 102, 0);" class="download_a" href="http://ec2-72-44-43-105.z-2.compute-1.amazonaws.com/downloads/current/Linux/Aptana_IDE_Setup_Linux.zip">Aptana RadRails (Linux)</a>を最初からインストールしてしまう』</span><br /><br />なんだか納得がいきませんが、私にとっては2が一番の近道だと・・・<br />といっても既に半日使ってる・・・うー<br />コマンドプロンプトに慣れていないから、 IDE で・・・と思いましたが、<br />こんなに遠回りになってしまうとは〜!<br />でも、自分で調べて解決をしていくのはやはり勉強になります。B-TECH 01http://www.blogger.com/profile/17884848745649987479noreply@blogger.com0tag:blogger.com,1999:blog-2404015655890417062.post-5439470655095544362007-10-02T17:48:00.000+09:002007-10-03T14:09:00.211+09:00今日のまとめ 10/2Railsをやろうと環境作りでちょっと戸惑いました。<br />コマンドプロンプトもある程度は使えるようにならなくてはー!<br /><br />教本「Ruby on Rails入門」の"1-1 Rubyが初めてのひとの概要"を読み、<br />Javaでもず〜っと意識してきた"ハズの"オブジェクト指向が<br />分かりやすく載っていたので、再確認できたうえ、<br />Javaとの文法の違いが分かりました。・・・まだ覚えられませんが・・・<br />なにか目的がないとなかなか頭に入ってこない性格なので、<br />明日は 教本「はじめよう Ruby on Rails」に載っているスケジューラーか<br />何かひとつアプリを作ってみます。<br /><br />前から欲しいと思っていた「シンプルな家計簿」でも、いいな〜<br />今晩少しRailsで作る家計簿などを検索してみようと思います。B-TECH 01http://www.blogger.com/profile/17884848745649987479noreply@blogger.com0tag:blogger.com,1999:blog-2404015655890417062.post-8395945684706502692007-10-02T10:35:00.000+09:002007-10-03T14:09:00.211+09:00Hashクラス<a href="http://www1.tf.chiba-u.jp/%7Eshin/tutorial/index.rb?Chapter=09">チュートリアル</a>のHashクラスの項目に下記のように書かれていました。<br /><br /><hr /><br />ハッシュの項目の名前としては文字列が使われることが普通ですが、<br />やろうと思えばどんな種類のオブジェクトでも使うことができます。<br />(それが必要になるとはあまり思えませんが)、配列や他のハッシュだってOKです。<br /><br /><br />weirdHash = Hash.new<br /><br />weirdHash[12] = 'モンキーズ'<br />weirdHash[[]] = 'からっぽ'<br />weirdHash[Time.new] = 'するなら今だ'<br /><br /><hr /><br />JavaでもいまいちHashは理解していなかったので、<br />教本「たのしいRuby」を読んで表示させてみた。<br /><br />----------------------------------------------<br /><br />weirdHash = Hash.new<br /><br />weirdHash[12] = 'モンキーズ'<br />weirdHash[[]] = 'からっぽ'<br />weirdHash[Time.new] = 'するなら今だ'<br /><br />weirdHash.each {|codeType, color|<br /> puts codeType.to_s + ': ' + color.to_s<br />}<br /><br />----------------------------------------------<br /> 結 果<br /><br />: からっぽ<br />Tue Oct 02 10:35:05 +0900 2007: するなら今だ<br />12: モンキーズ<br /><br />----------------------------------------------B-TECH 01http://www.blogger.com/profile/17884848745649987479noreply@blogger.com0tag:blogger.com,1999:blog-2404015655890417062.post-70876302413488361352007-10-02T10:10:00.000+09:002007-10-03T14:09:00.211+09:009. クラス-----------------------------------------------------------------<br /> 練習問題<br />• 生まれた年、月、そして日を順に訊いてそこから年齢を計算します。<br />そして、過ごしてきた誕生日それぞれに対して大きなおめでとう!を<br />プレゼントしましょう。<br />-----------------------------------------------------------------<br />puts '生まれた年は?'<br />year = gets.chomp<br /><br />puts '生まれた月は?'<br />month = gets.chomp<br /><br />puts '生まれた日は?'<br />day = gets.chomp<br /><br />today = Date.today<br /><br />age = today.year.to_i - year.to_i<br /><br />puts age.to_s + "歳ですね"<br /><br />-----------------------------------------------------------------<br /><br />たぶん、練習問題の意味とは違うような気がしますが。<br />上記だと生まれ年だけ聞けば良いですもね。<br /><br />.to_iと.to_sの使いわけに気づきました(おそい)<br />Javaと違って最初に変数の型を宣言しないから、<br />「today.year.to_i - year.to_i」としなければ<br />計算ができないのですねー<br /><br />あと、Date::todayメソッドで"年-月-日"と取得したら<br />today.year/.month/.day と取り出せるのも便利ですね。B-TECH 01http://www.blogger.com/profile/17884848745649987479noreply@blogger.com0tag:blogger.com,1999:blog-2404015655890417062.post-28825874759990344832007-10-01T16:52:00.000+09:002007-10-03T14:09:00.211+09:00今日のまとめRuby 練習問題をやり、<br />「sortメソッドを使わずに配列の中身をソートする」問題でつまずきました。<br /><elem>その後、なんだか乗れずに数字を英語に変換するプログラム(100なら one hundred)でも<br />ん〜いまいち・・・<br /><br /></elem>-------------------------------<br /><h2><span style="font-size:100%;"> 練習問題 </span></h2> <p><span style="font-size:100%;"> • 10億(One billion)秒... (もし記録が残っているなら)あなたの生まれた 正確な時刻を見つけ、いつ10億秒歳になる(あるいはなった)のかを 計算してみなさい。そしてカレンダーに印をつけましょう。</span> </p> <elem>-------------------------------<br /><br />time = Time.mktime(1976, 8, 3, 10, 11)<br />puts "あなたの生まれた時"<br />puts time<br />bilSec = 1000000000<br />time = time + bilSec<br /><br />puts "10億秒後は"<br />puts time<br /><br /></elem>-------------------------------<br /><br />上記プログラムはあっているのだろうか???<br />10億秒後の日付って・・・B-TECH 01http://www.blogger.com/profile/17884848745649987479noreply@blogger.com0tag:blogger.com,1999:blog-2404015655890417062.post-55476226938372225562007-10-01T11:23:00.000+09:002007-10-01T12:00:42.965+09:00Rubyを使って 練習問題7. 配列とイテレータ<br /><br />好きな数だけ単語の入力をしてもらい<br />(1行に1単語、最後は<kbd>Enter</kbd>だけの空行)、<br />アルファベット順に並べ変えて出力するような<br />プログラムを書いてみましょう<br /><br />-----------------------------------------<br /><br />ary =[]<br />elem=nil<br /><br /><br />puts 'なにか入力してください'<br /><br />while elem != ''<br /> elem=gets.chomp <br /> ary<<elem<br />end<br /><br />puts ary.sort<br /><br />------------------------------<br /><br />「elem=nil」と宣言し忘れRubyに何度か怒られた<br />「最後は<kbd>Enter</kbd>だけの空行」は・・・?「''」だけで良いんですね。<br />「.sort」は02さんが見つけてくれました。<br />はじめ「ary<<gets.chomp」としましたが、これだと改行しても配列表示してくれず、<br />上記のように変更してみたら成功!B-TECH 01http://www.blogger.com/profile/17884848745649987479noreply@blogger.com0tag:blogger.com,1999:blog-2404015655890417062.post-54713517362585831762007-10-01T11:21:00.000+09:002007-10-01T14:38:38.695+09:00Ruby学習 参考URL<BR><br /><a href="http://www1.tf.chiba-u.jp/%7Eshin/tutorial/index.rb" target="_blank">□ プログラミング入門 - Rubyを使って -</a><BR><BR><br /><a href="http://www.namaraii.com/rubytips/" target="_blank">□ 逆引きRuby</a><BR><BR><br /><a href="http://www.ruby-lang.org/ja/man/" target="_blank">□ Ruby リファレンスマニュアル</a><br><br>B-TECH 01http://www.blogger.com/profile/17884848745649987479noreply@blogger.com0