Ruby on Rails にほんのちょぴり触れた
久しぶりに触ってみた
Rails といえば誰も使わないブックマークシステムだよね。というわけで、ちょっと試してみた。
bookmark という DB を作って、 rails コマンドでスケルトンを作成。
テーブル定義はこんな感じ。
mysql> desc bookmarks; +---------+-----------+------+-----+-------------------+----------------+ | Field | Type | Null | Key | Default | Extra | +---------+-----------+------+-----+-------------------+----------------+ | id | int(11) | NO | PRI | NULL | auto_increment | | url | text | NO | | | | | comment | text | YES | | NULL | | | update | timestamp | NO | | CURRENT_TIMESTAMP | | +---------+-----------+------+-----+-------------------+----------------+
view を作って ActionController にデータを渡す。
<h1>Bookmark#new</h1> <p>Find me in app/views/bookmark/new.html.erb</p> <%= form_tag :action => 'new' %> <%= text_field :param, 'url' %> <%= text_field :param, 'comment' %> <%= submit_tag 'bookmarking!' %>
これを受け取るRuby 側
class BookmarkController < ApplicationController def new @bk = Bookmark.new(params[:param]) end def list end def edit end end
とかやってみたんだけど、なぜかエラーになる。
ActiveRecord::DangerousAttributeError in BookmarkController#new update is defined by ActiveRecord
以前 wiki を作ってみよう! みたいのをやったときは普通にパラメータを渡せたんだが。。。
というか、 update は既に定義済み? みたいなことを言われてもこっちは定義してねーんだから勝手に重複してんじゃねーよ、というのが率直なところ><
と思ったが
まじまじと見てみると、確かに udate というメソッドを上書きしていたことが判明><
ruby スクリプト的には無かったのだけど、テーブルのフィールドで update という名前を使っていた!><
というわけで、以下のようにすることで登録から一覧の表示までできた。
alter tabel bookmarks change `update` `update_time` timestamp;
その後、各 rails スクリプトを以下のように編集。
- view
1 <h1>Bookmark#new</h1> 2 <p>Find me in app/views/bookmark/new.html.erb</p> 3 4 <%= form_tag :action => 'create' %> 5 <%= text_field :bookmark, 'url' %> 6 <%= text_field :bookmark, 'comment' %> 7 <%= submit_tag 'bookmarking!' %>
1 <h1>Bookmark#list</h1> 2 <p>Find me in app/views/bookmark/list.html.erb</p> 3 <%= @list.map {|list| "id -> #{list.id}, url -> #{list.url}, comment -> #{list.comment}, time -> #{list.update_time}" }.join('<br>') %>
- controller
1 class BookmarkController < ApplicationController 2 3 def new 4 end 5 6 def create 7 @bookmark = Bookmark.new(params[:bookmark]) 8 if @bookmark.save 9 redirect_to :action => 'list' 10 end 11 end 12 13 def list 14 #@bookmark = Bookmark.new 15 @list = Bookmark.find(:all) 16 end 17 18 def edit 19 end 20 end
これで http://localhost:3000/bookmark/new にアクセスして、テキストフィールドに値を入れてボタンを押すと一覧が表示されるプログラムを作る事ができた。
やばい。一度やってしまえばこれはリアル10分作業だな。。。
ちなみに
update 問題にぶつかるまでが15分くらいで、「お、さすが rails !超早いぜ!」とか思ったのだが、 update の壁にぶつかって2時間ちょっとかかったwww
それと、 update の問題が解決してから一覧の表示までで10分くらいだった。