ラベル 作業記録 rails の投稿を表示しています。 すべての投稿を表示
ラベル 作業記録 rails の投稿を表示しています。 すべての投稿を表示

2010年10月10日日曜日

日報アプリ・月表示(第1歩)

家人が具合を悪くして病院に連れて行ったり、そのため家事をするはめになったりで、あまり作業進まず。仕方ないや。

dbに保存されているeventを、月別に表示する作業。

routes.rbは結局

match '/calendar/:year/:month/:day' => 'calendars#show_date',:year=>/(19|20)\d\d/,:month=>/[01]?\d/,:day=>/[0-3]?\d/
match '/calendar/:year/:month' => 'calendars#show_month',:year=>/(19|20)\d\d/,:month=>/[01]?\d/
match '/calendar/:year/:month/:week' => 'calendars#show_week',:year=>/(19|20)\d\d/,:month=>/[01]?\d/,:week=>/(1st|2nd|3rd|4th|5th)/
match '/calendar/:year' => 'calendars#show_year',:year=>/(19|20)\d\d/

と書き換えた。controller側でredirectするような処理をするなら、URLのリクエストでactionを代えたほうがリーズナブル、と考えた。

  1. calendar/2010/10/10=>その日のイベントを表示するshow_date
  2. calendar/2010/10=>イベントを月ごとに表にして表示するshow_month
  3. calendar/2010=>いわゆるスクールカレンダーを表示するshow_year
  4. calendar/2010/10/1st=>10月第1週を表示するshow_week


という感じ。controllerのaction「show_month」だけつくり始めた。

def show_month
last_day=Time.days_in_month(params[:month].to_i) #表示する月の日数を求める
start_date=Date::new(params[:year].to_i,params[:month].to_i,1) #検索用=>"2010-4-1"
end_date=Date::new(params[:year].to_i,params[:month].to_i,last_day) #=>"2010-4-31"
#検索する
@events=Event.where(["start_at >=? AND start_at <=?",start_date,end_date])
end

dbの検索は
@events=Event.where(["start_at >=? AND start_at <=?",start_date,end_date])

とシンプルに書けることがわかった。本日の収穫。
viewは今のところただイベントを表示しているだけ。

<% @events.each do |event| %>
< table>
< tr>
< td><%= event.name %></td>
< td><%= event.start_at %></td>
< td><%= event.end_at %></td>
</tr>
<% end %>
</table>


で、実行するとこうなる。

2010年10月5日火曜日

csvを読み込む

いちおう、今日は勉強した。あまり熱心ではないけど。

paperclipでファイルのuploadはruby1.9.2+rails3.0.0でも順調。全く問題なし。

csvの読み込みにはfastercsvを使うな、と怒られます。おそらくrubyに。で、標準ライブラリのcsvを使う、と。

4月分の学校行事を記述したcsvを準備して、それを読み込む。あれこれあれこれやって、やっと「行事がある日だけeventに読み込んでdbに保存する」という動作が成功した。これだけで3、4時間かかっているな。

途中、Netbeans6.9.1ではruby-debug-ide19が起動しないという問題に遭遇した。未だ解決せず。gemのインストールはできてるんだけど、起動しないんだなあ。Netbeansのフォーラムでも同じ症状を訴える人がいて、解決できてる人とできていない人がいる。Macの人はだめみたい。

debugerが使えないのは痛い。下手なプログラムほど必要とするのに。

rvm、ruby1.9.2、Netbeans6.9.1、いずれかの問題かわからないところがこれまた困った。しばらくdebuggerに頼らないで済むようがんばろう。

2010年9月23日木曜日

Authlogicを試す

deviseと人気を二分しているらしいAuthlogicを使ってみる。

rails3環境にインストールするにはちょっと注意が必要なようで、RailsPlugin.orgによると動く、動かないが半々というところ。動いた、という人のコメントによると
gem 'authlogic', :git => 'git://github.com/odorcicd/authlogic.git', :branch => 'rails3'

こうするといいらしい。また、userモデルに「to_key」という関数を書いておけ、というコメントもあります。ま、移行期の現象ということでしょう。

NetBeans上でプロジェクトのGemfileに上記のように書いて右クリックメニュー「bundler」→「install」とすると・・・gitがない、と怒られてしまいます。gitは確かにOSX上でインストールしてあるので、ターミナルから

bundle install

してみたら正常終了。私の設定ミスか、NetBeansのbugか。
ここまでで使えるようになった、と。

2010年9月18日土曜日

event_calendar

職員室内で使うwebアプリを作るとしたら・・・予定を入力できるカレンダーが表示できたらいいだろうなあ、と思う。未だに予定の共有は「紙」ですから。

googleカレンダーで共有したいし、実際に仲間内でそれを試したこともあるんですが、googleのID取得でつまづく人続出。それに最近は、Gmailのアドレスもらおうと思ったら携帯番号の入力を求められるし・・・。

教員は基本的に文系の人がおおいわけで、パソコンなんてできるだけ使いたくない、と公言している人がたくさん。

それはともかく、予定表づくりにぴったりの「event_calendar」というpluginを発見。

iMacの到着を前にそわそわしている心を落ち着けるため、どのくらい手軽に使えるか試してみる。

pluginのインストールは簡単。

rails plugin install git://github.com/elevation/event_calendar.git


rails generate event_calendar

generateすると、プロジェクトにカレンダー関連のファイルがひと通り追加されます。マイグレーションファイルはこんな感じ。

class CreateEvents < ActiveRecord::Migration
def self.up
create_table :events do |t|
t.string :name
t.datetime :start_at
t.datetime :end_at

t.timestamps
end
end

def self.down
drop_table :events
end
end

あとはlayoutに
<%= javascript_include_tag "event_calendar" %>

を付け加えれば、とりあえずOK。うーん、手軽だ。
サーバを立ててlocalhostに接続し、/calendarにアクセスすると、


はい、何もできないけどまずはカレンダーを表示できました。自動で追加されるモデル「event」をcalendar_controllerが表示する、という仕組みですね。あとはeventを自分で作る処理を付け加えていきなさい、と。なるほど。

2010年9月13日月曜日

devise 確かめる

一夜明けてもう一度deviceの使い方を確かめる。
 新しいプロジェクトを作って、deviseをbundler install、

rails g devise user

ここまでで作業を一切やめて、実行してみる。無事動きます。で、
rake routes
でルートを確かめてみる。次のようになってました。
new_user_session GET    /users/sign_in(.:format)       {:action=>"new", :controller=>"devise/sessions"}
user_session POST   /users/sign_in(.:format)       {:action=>"create", :controller=>"devise/sessions"}
destroy_user_session GET    /users/sign_out(.:format)      {:action=>"destroy", :controller=>"devise/sessions"}
user_password POST   /users/password(.:format)      {:action=>"create", :controller=>"devise/passwords"}
new_user_password GET    /users/password/new(.:format)  {:action=>"new", :controller=>"devise/passwords"}
edit_user_password GET    /users/password/edit(.:format) {:action=>"edit", :controller=>"devise/passwords"}
user_password PUT    /users/password(.:format)      {:action=>"update", :controller=>"devise/passwords"}
user_registration POST   /users(.:format)               {:action=>"create", :controller=>"devise/registrations"}
new_user_registration GET    /users/sign_up(.:format)       {:action=>"new", :controller=>"devise/registrations"}
edit_user_registration GET    /users/edit(.:format)          {:action=>"edit", :controller=>"devise/registrations"}
user_registration PUT    /users(.:format)               {:action=>"update", :controller=>"devise/registrations"}
user_registration DELETE /users(.:format)               {:action=>"destroy", :controller=>"devise/registrations"}


 この段階でusers_controllerを追加したら、あっという間にルートがおかしなことになりました。なるほど。

 たとえばプロフィールとかはuser_profileみたいなモデルを作って、管理したほうがいい、と。userモデルはあくまでも認証用に使うだけにしたほうが素人には安心、と。

2010年9月12日日曜日

devise いじる

この土日にゆっくり寝たのがよかったのか、かぜはひと段落のようです。のどがちょっと痛いけどね。また明日からの学校生活を無事送れそう。

50近いおやぢが小学校1年生の相手をするのは、けっこう大変。

そんなことよりdevise。

はてなで見つけたreadmeの翻訳とかを参考に少しいじってみる。

モデル作った時点でめんどうなことは全部plugin側でやってくれている、らしい。試しにdeviceがもっているviewをusers用に展開してから、ブラウザから/users/sign_inを表示してみる。具体的には
rails g devise:views users

とする、と。本当にこれでいいのかいな。(^^;)たしかにviewがばばーっと作られましたが、こんなことしなくてもよかったのか?

sign_inが表示されて「おおーっ」となったわけですが、現実にユーザを作成してsign_upしようとしたら「root_pathがわからない」と怒られてしまった。そういえばそんなこと書いてあったなreadmeに。
root :to => "home"

とか書け、と。routes.rbに書いてみたけどなんだかうまくいかない。うーん。

そのあとusers_controllerを作ってindex、show、editとactionつけてみたら、こんどはsign_inが表示されなくなってしまった。orzがっくり。

こんなふうに右往左往しながら素人プログラミングは進むんだなあ。これが楽しいわけなんだけど。

ユーザ認証 plugin deviseを使う

タイトル通りの作業ですな。

ちゃんとしたユーザ認証のpluginを使ってみよう、ということで、

The Ruby Toolbox Search

さんで最近のダウンロード数(?でいいのかな)が多い、「devise」なるpluginを選んでみた。
rails2.3.8上ではacts_asうんたらいう有名なpluginを試そうとして、なにやらライブラリが足りない、といわれて恐れおののいて使うのを止めた経験がある。当時はrails使い始めたばかりで右も左もわからなかったから、「とりあえず動く」ことが目標のプロジェクトを作っていたので深入りは避けた、と。

現在はrails3のお勉強、思いついたことは一通りやってみる、という方針。

gemでインストールできるのだが、rails3っぽく、というわけで、Gemfileに
gem 'device'

と書いて、bundlerでinstallする。NetBeansだと、プロジェクトペイン上で右クリック、出てくるrails関連のメニューから「Bundler」選んで「install」に決定、という感じ。

ほほー、ちゃんとインストールされましたねー、wardenといっしょに。当然依存関係もちゃんと解決してくれるのね。

ところがここから先はNetBeans上では作業できなくて、ターミナル開くことになりました。

まずdeviseをプロジェクトにインストール(??)する。
rails g devise:install

で、それから認証を必要とするmodelを作ってみる。
rails g devise user

userモデルを作ってみました。
こんな感じで作られてます。

class User < ActiveRecord::Base
# Include default devise modules. Others available are:
# :token_authenticatable, :confirmable, :lockable and :timeoutable
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable, :validatable

# Setup accessible (or protected) attributes for your model
attr_accessible :email, :password, :password_confirmation, :remember_me
end


さて、この先どーするのかな?(^^;)github行って調べよう。