2008年2月13日水曜日

改訂版: “Ruby on Railsで10分で作るTwitterもどき” を試す / Aptana on MacOS X (Leopard)

以前のエントリの改訂版
ちゃんとRails用のViewを使ってますw.



ZDnet
Ruby on Railsで10分で作るTwitterもどき
http://japan.zdnet.com/video/screencast/story/0,3800079413,20354695,00.htm

を見つけて自分でやってみたいなぁーと思いメモってみた.

そのままコマンドでやるとヒネリがないので環境をLeopard / Aptanaとしてやった内容を加えます.

Aptana StudioをLeopardに入れて遊んだ話はこれ.(RailsのPluginを入れるのもかいてある.)
http://edotprintstacktrace.blogspot.com/2007/11/ronraptana-studio.html



以下記録.


01.mysqlにdatabase, "twitter_development"を作成.
[9:53]


Aptana:
とりあえずOSに付属していて,Aptanaがデフォルトで作成してくれる
sqlite3を使うのでここは飛ばします.

02."rails twitter"
[9:49]


Aptana:
Railsパースペクティブを選び,

Rails Navigator内のコンテクストメニューで'New/Rails Project'を選択.

'Project name'にtwitterを入力.
Finishでプロジェクトができる.(ダイアログが消えないのでCancelで消す.2回目を押してしまった場合Consolでファイルの重複確認をすることになる)


03."cd twitter"
[9:47]


Aptana:
Navigatorのtwitterプロジェクトを開いてみるぐらい?

04."./script/plugin install acts_as_authenticated"
[9:41]


Aptana:
Rails Pluginsビューを利用.
左のセレクタから'Acs as Authenticated'を選択.下のように画面まで出るw.で'Go'!.


05."./script/generate authenticated user account"
[9:21]


Aptana:
Generatorsビューを利用.
セレクタから'authenticated'が選べると良いのだがないので入力.引数として'user account'といれ,'Go'!.


06."./script/generate model Friendship"
[9:11]


Aptana:
Generatorsビューを利用.
セレクタから'model'を選び,引数として'Friendship'といれ,'Go'!.
#セレクタがたまに空になるのでそういうときには直接入力.
#Frendshipsではないw.


07."./script/generate model Status"
[9:05]


Aptana:
Generatorsビューを利用.
セレクタから'model'を選び,引数として'Status'といれ,'Go'!.
#セレクタがたまに空になるのでそういうときには直接入力.


08."./script/generate controller User show"
[8:57]


Aptana:
Generatorsビューを利用.
セレクタから'controller'を選び,引数として'User show'といれ,'Go'!.
#セレクタがたまに空になるのでそういうときには直接入力.


09."rm public/index.html"
[8:54]


Aptana:
Navigatorでtwitter/public/index.htmlを選択,コンテクストメニュで削除.

10.edit "db/migrate/002_cretate_friendships.rb"
[8:50]
friendshipsテーブルにカラムの追加
"create_table :friendships do |t|"の下に以下追加
ーー
t.column :user_id, :integer
t.column :friend_id, :integer

ーー


Aptana:
Navigatorでtwitterを選択,コンテクストメニュでRefresh選択.
#これで生成されたものがNavigatorに反映される.

Navigatorでdb/migrate/002_cretate_friendships.rbをダブルクリック
で,編集.
#Shift+Apple+Fでフォーマット(インデント)が整えられるのが便利.

11.edit "db/migrate/003_create_statuses.rb"
[8:38]
statusesテーブルにカラムの追加
"create_table :statuses do |t|"の下に以下追加
ーー
t.column :user_id, :integer
t.column :desc, :string
t.column :created_on, :datetime

ーー


Aptana:
Navigatorでdb/migrate/003_create_statuses.rbをダブルクリック
で,編集.

12.edit "config/routes.rb"
[8:21]
1行目"ActionController::Routing::Routes.draw do |map|"の下に以下追加
ーー
map.connect "", :controller => "user", :action => "home"
map.connect ":user", :controller => "user", :action => "show"

ーー


Aptana:
Navigatorでconfig/routes.rbをダブルクリック
で,編集.

13.edit "app/models/friendship.rb"
[7:57]
1行目"class Friendship < ActiveRecode::Base"の下に以下追加
ーー
belongs_to :user
belongs_to :friend, :class_name => "User", :foreign_key => "friend_id"

ーー


Aptana:
Navigatorでapp/models/friendship.rbをダブルクリック
で,編集.

14.edit "app/models/user.rb"
[7:48]
2行目"class User < ActiveRecode::Base"の下に以下追加
ーー
has_many :friendships
has_many :friends, :through => :friendships
has_many :followerships, :class_name => "Friendship", :foreign_key => "friend_id"
has_many :followers, :through => :followerships, :source => :user
has_many :statuses

ーー


Aptana:
Navigatorでapp/models/user.rbをダブルクリック
で,編集.

15.edit "app/models/status.rb;
[7:06]
1行目"class Status < ActiveRecode::Base"の下に以下追加
ーー
belongs_to :user

ーー


Aptana:
Navigatorでapp/models/status.rbをダブルクリック
で,編集.

16.edit "app/controllers/account_controller.rb"
[6:57]
1行目"class AccountController < ApplicationController"の下,
"# Be sure ..."から "before_filter :login_from_cookie"までを削除
削除されているコメント以外の内容は以下.
ーー
include AuthenticatedSystem
before_filter :login_from_cookie

ーー
"/account"を"/"に置換(3カ所?)


Aptana:
Navigatorでapp/controllers/account_controller.rbをダブルクリック
で,編集.
#Apple+Fで'Find/Replace'パネルがでるのでこれでReplace.
#(カーソルを先頭にしてReplace All)


17.edit "app/controllers/application.rb"
[6:45]
16.で削除した行を"session :session_key => '_twitter_session_id'"の下に入れる.


Aptana:
Navigatorでapp/controllers/application.rbをダブルクリック
で,編集.

18.edit "app/controllers/user_controller.rb"
[6:34]
1行目"class UserController < ApplicationController"の下に以下追加

ーー
before_filter :login_required
helper_method :friend?

def home
@user = current_user
@statuses = Status.find(:all,
:conditions => {
:user_id => @user.friends.map(&:id)<<@user.id
},
:include => :user,
:order => "created_on desc",
:limit => 50)
render :action => "show"
end

ーー

"def show"の下に以下を追加
#show.rhtmlが使われるそうです.
ーー
redirect_to :action => "home" if current_user.login == params[:user]
@user = User.find_by_login params[:user]
@statuses = @user.statuses.find(:all, :order => "created_on, desc", :limit => 50)

ーー

"update"メソッドを追加以下最後のend前に入れる
ーー
def update
Status.create :user_id => current_user.id, :desc => params[:desc]
redirect_to "/"
end

ーー

"add"メソッドを追加以下最後のend前に入れる
ーー
def add
user = User.find_by_login params[:id]
Friendship.create :user_id => current_user.id, :friend_id => user.id
redirect_to "/#{user.login}"
end

ーー

protected で "friend?"メソッドを追加以下最後のend前に入れる
ーー
protected
def friend?
!!Friendship.find_by_user_id_and_friend_id(current_user.id, @user.id)
end

ーー


Aptana:
Navigatorでapp/controllers/user_controller.rbをダブルクリック
で,編集.

19.edit "app/views/user/show.rhtml"
[3:03]
まずは全部削除,以下を記述
ーー
Name: <%= @user.login %> <br />
<% if @user == current_user -%>
<% form_tag :action => "update" do -%>
<%= text_field_tag "desc" %>
<%= submit_tag "update" %>
<% end -%>
<% elsif !friend? -%>
<%= link_to "add", :action => "add", :id => @user.login %>
<% end -%>

<br />
<br />

Status<br />
<% for s in @statuses -%>
<%= s.created_on.to_s(:db)%> :
<%= h s.user.login %> :
<%= h s.desc %> <br />
<% end -%>

<br />
<br />

Friends<br />
<% for f in @user.friends -%>
<%= link_to f.login, f.login %><br />
<% end -%>

<br />
<br />

Followers<br />
<% for f in @user.followers - @user.friends -%>
<%= link_to f.login, f.login %><br />
<% end -%>

ーー


Aptana:
Navigatorでapp/views/user/show.rhtmlをダブルクリック
で,編集.

20."rake db:migrate"
[0:17]


Aptana:
rake tasksビューを用いてmigrateを反映させます.
セレクタより'db:migrate'を選択.引数は空で'Go'!.


21."./script/server"
[0:14]


Aptana:
あくまでAptanaでがんばるということで…
Server ビューでコンテクストメニュを出してAddを選択.

Server propertiesが出るのでとりあえずそのままの設定で'OK'.

追加時はStop状態.そこで今追加されたitem(server)上でコンテクストメニュを出してStartを選ぶ.

起動する.

22.ブラウザで起動,URL入力
[0:07]
とりあえずここを表示している''http://127.0.0.1:3000'


Aptana:
あくまでAptanaでがんばるということで…
ブラウザを起動.

URLを入力する.

23.表示.
[0:00]
でもアカウント作成のためにはここ.
'http://127.0.0.1:3000/account/signup'


Aptana:
/account/loginに飛ばされる.

/account/signupはこう.




以上.誰かの役に立てば幸い.
間違いとか色々教えていただけるとやっぱり幸いです.

0 件のコメント: