diff --git a/app/controllers/users_controller.rb b/app/controllers/users_controller.rb
index 1b1bf54..5091d96 100644
--- a/app/controllers/users_controller.rb
+++ b/app/controllers/users_controller.rb
@@ -15,6 +15,23 @@ def show
end
end
+ def add_friend
+ @current_user ||= User.find_by_auth_token!(cookies[:auth_token]) if cookies[:auth_token]
+ @user = User.find(params[:id])
+
+ unless Friendship.exists?(:user_id => @current_user.id, :friend_id => params[:id])
+ unless Friendship.exists?(:user_id => params[:id], :friend_id => @current_user.id)
+ unless @current_user.id == @user.id
+ friendship = Friendship.new
+ friendship.user_id = @current_user.id
+ friendship.friend_id = @user.id
+ friendship.save
+ end
+ end
+ end
+
+ end
+
def logout
cookies.delete(:auth_token)
redirect_to :root
diff --git a/app/models/friendship.rb b/app/models/friendship.rb
new file mode 100644
index 0000000..2d95200
--- /dev/null
+++ b/app/models/friendship.rb
@@ -0,0 +1,7 @@
+class Friendship < ActiveRecord::Base
+ belongs_to :user
+ # 其模型并不存在,所以要给出 :class_name 及 :foreign_key 选项。
+ # 以让活动记录知道上哪里去找记录。
+ belongs_to :friend, :class_name => "User", :foreign_key => "user_id"
+
+end
diff --git a/app/models/user.rb b/app/models/user.rb
index 0ed5e32..fb90a46 100644
--- a/app/models/user.rb
+++ b/app/models/user.rb
@@ -1,8 +1,11 @@
class User < ActiveRecord::Base
has_many :chatrooms, :through => :room_mems
has_many :room_mems
+ has_many :friendships
+ # 创建 has_many :through 关联,在 friendships 内找寻 friends。
+ has_many :friends, :through => :friendships
+
has_secure_password
-
before_create { generate_token(:auth_token) }
def generate_token(column)
diff --git a/app/views/users/add_friend.html.erb b/app/views/users/add_friend.html.erb
new file mode 100644
index 0000000..eb79c63
--- /dev/null
+++ b/app/views/users/add_friend.html.erb
@@ -0,0 +1,31 @@
+
+ 用户
+ <%= @user.username %>
+ 的个人主页哟
+
+
+
+
+ | 头像 |
+ 成员id |
+ 性别 |
+ 手机号 |
+ 状态 |
+ 最近登录 |
+ |
+
+
+
+
+
+ | <%= image_tag(@user.avatar) %> |
+ <%= @user.username %> |
+ <%= @user.gender %> |
+ <%= @user.phone %> |
+ <%= @user.status %> |
+ <%= @user.updated_at %> |
+ <%= link_to '站内信', "#" %> |
+
+
+
+<%= link_to '回到外婆桥', :root %> |
diff --git a/app/views/users/show.html.erb b/app/views/users/show.html.erb
index 1d39ceb..5bcd086 100644
--- a/app/views/users/show.html.erb
+++ b/app/views/users/show.html.erb
@@ -24,7 +24,7 @@
<%= @user.phone %> |
<%= @user.status %> |
<%= @user.updated_at %> |
- <%= link_to '加为好友', "#" %> |
+ <%= button_to '加为好友', addfriend_path(@user.id), :method => :put %> |
diff --git a/config/routes.rb b/config/routes.rb
index ba4bfa3..ace75c0 100644
--- a/config/routes.rb
+++ b/config/routes.rb
@@ -10,6 +10,7 @@
delete "logout" => "users#logout", :as => "logout"
get "users/:id" => "users#show", :as => "showuser"
+ put "users/:id" => "users#add_friend", :as => "addfriend"
get "chatrooms/:id/enter" => "room_mems#enter", :as => "enterroom"
root 'homepage#index'
diff --git a/db/migrate/20150604064251_create_friendships.rb b/db/migrate/20150604064251_create_friendships.rb
new file mode 100644
index 0000000..0e350f0
--- /dev/null
+++ b/db/migrate/20150604064251_create_friendships.rb
@@ -0,0 +1,10 @@
+class CreateFriendships < ActiveRecord::Migration
+ def change
+ create_table :friendships do |t|
+ t.integer :user_id
+ t.integer :friend_id
+
+ t.timestamps
+ end
+ end
+end
diff --git a/db/schema.rb b/db/schema.rb
index 5c8a0ad..d4e5d6d 100644
--- a/db/schema.rb
+++ b/db/schema.rb
@@ -11,7 +11,7 @@
#
# It's strongly recommended that you check this file into your version control system.
-ActiveRecord::Schema.define(version: 20150603100813) do
+ActiveRecord::Schema.define(version: 20150604064251) do
create_table "chatrooms", force: true do |t|
t.string "roomname"
@@ -27,6 +27,13 @@
t.text "description"
end
+ create_table "friendships", force: true do |t|
+ t.integer "user_id"
+ t.integer "friend_id"
+ t.datetime "created_at"
+ t.datetime "updated_at"
+ end
+
create_table "room_mems", force: true do |t|
t.integer "chatroom_id"
t.integer "user_id"
diff --git a/test/fixtures/friendships.yml b/test/fixtures/friendships.yml
new file mode 100644
index 0000000..0f22a6e
--- /dev/null
+++ b/test/fixtures/friendships.yml
@@ -0,0 +1,9 @@
+# Read about fixtures at http://api.rubyonrails.org/classes/ActiveRecord/FixtureSet.html
+
+one:
+ user_id: 1
+ friend_id: 1
+
+two:
+ user_id: 1
+ friend_id: 1
diff --git a/test/models/friendship_test.rb b/test/models/friendship_test.rb
new file mode 100644
index 0000000..aa27b3f
--- /dev/null
+++ b/test/models/friendship_test.rb
@@ -0,0 +1,7 @@
+require 'test_helper'
+
+class FriendshipTest < ActiveSupport::TestCase
+ # test "the truth" do
+ # assert true
+ # end
+end