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