Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions app/controllers/api_controller.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
class ApiController < ActionController::Base
#問題 如果沒有繼承action controller,會有什麼影響嗎?
end
10 changes: 10 additions & 0 deletions app/controllers/api_v1/messages_controller.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
class ApiV1::MessagesController < ApiController

def index
@messages = Message.all
end




end
30 changes: 30 additions & 0 deletions app/controllers/likes_controller.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
class LikesController < ApplicationController

before_action :authenticate_user!
before_action :set_message

def create
like = @message.finy_like_by(user)
if like
# do nothing
else
@message.likes.create!( :user => user )
end

redirect_to :back
end

def destroy
@like = user.likes.find( params[:id] )
@like.destroy

redirect_to :back
end

protected

def set_message
@message = message.find( params[:message_id] )
end

end
30 changes: 26 additions & 4 deletions app/controllers/messages_controller.rb
Original file line number Diff line number Diff line change
Expand Up @@ -31,34 +31,56 @@ def new

def create
@message = Message.new( message_params )
@message.user = current_user
@message.user = user

@message.save!

redirect_to root_path
end

def edit
@message = current_user.messages.find( params[:id] )
@message = user.messages.find( params[:id] )

render "new"
end

def update
@message = current_user.messages.find( params[:id] )
@message = user.messages.find( params[:id] )

@message.update!( message_params )

redirect_to message_path(@message)
end

def destroy
@message = current_user.messages.find( params[:id] )
@message = user.messages.find( params[:id] )
@message.destroy

redirect_to root_path
end

def subscribe
@message = message.find( params[:id] )

subscription = @message.finy_subscription_by(user)
if subscription
# do nothing
else
@subscription = @message.subscriptions.create!( :user => user )
end

redirect_to :back
end

def unsubscribe
@message = message.find( params[:id] )

subscription = @message.finy_subscription_by(user)
subscription.destroy

redirect_to :back
end

protected

def message_params
Expand Down
4 changes: 4 additions & 0 deletions app/models/like.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
class Like < ActiveRecord::Base
belongs_to :topic
belongs_to :user
end
8 changes: 7 additions & 1 deletion app/models/message.rb
Original file line number Diff line number Diff line change
@@ -1,11 +1,17 @@
class Message < ActiveRecord::Base

belongs_to :user

has_many :comments, :dependent => :destroy
has_many :likes
has_many :likes_users, :through => :likes, :source => :user
has_many :subscriptions
has_many :subscribed_users, :through => :likes, :source => :user

def last_comment_summary
self.comments.last.try(:content).try(:truncate, 20)
end

def finy_subscription_by(user)
self.subscriptions.find_by_user_id( user.id )
end
end
6 changes: 6 additions & 0 deletions app/models/subscription.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
class Subscription < ActiveRecord::Base

belongs_to :user
belongs_to :topic

end
4 changes: 4 additions & 0 deletions app/models/user.rb
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,10 @@ class User < ActiveRecord::Base

has_many :messages
has_many :comments
has_many :likes

has_many :subscriptions
has_many :subscribed_messages, :through => :likes, :source => :message

def display_name
self.email.split("@").first
Expand Down
3 changes: 3 additions & 0 deletions app/models/user_message_ship.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
class UserMessageShip < ActiveRecord::Base

end
8 changes: 8 additions & 0 deletions app/views/api_v1/messages/_message.json.jbuilder
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
json.message do
json.id message.id
json.status message.status
json.category_name message.category_name
json.title message.title
json.content message.content
json.created_at message.created_at
end
5 changes: 5 additions & 0 deletions app/views/api_v1/messages/index.json.jbuilder
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
json.results do
json.array!(@messages) do |m|
json.partial! 'message', message: m
end
end
17 changes: 16 additions & 1 deletion app/views/messages/show.html.erb
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,22 @@

<%= simple_format @message.content %>


<h2>subscription list</h2>
<ul>
<% @message.subscriptions.each do |u| %>
<li><%= u.user.email %></li>
<% end %>
</ul>


<h2>like list</h2>
<ul>
<% @message.likes.each do |u| %>
<li><%= u.user.email %></li>
<% end %>
</ul>

<h2>Comments list</h2>

<%= form_for [@message, @comment] do |f| %>
Expand All @@ -28,4 +44,3 @@
</p>

<% end %>

7 changes: 7 additions & 0 deletions config/routes.rb
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,13 @@
resources :comments
end

scope :path => '/api/v1/', :module => "api_v1", :as => 'v1', :defaults => { :format => :json } do
resources :messages
end




# The priority is based upon order of creation: first created -> highest priority.
# See how all your routes lay out with "rake routes".

Expand Down
9 changes: 9 additions & 0 deletions db/migrate/20160429091408_create_subscriptions.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
class CreateSubscriptions < ActiveRecord::Migration
def change
create_table :subscriptions do |t|
t.integer :user_id, :integer, :index => true
t.integer :message_id, :integer, :index => true
t.timestamps null: false
end
end
end
9 changes: 9 additions & 0 deletions db/migrate/20160429091414_create_likes.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
class CreateLikes < ActiveRecord::Migration
def change
create_table :likes do |t|
t.integer :user_id, :integer, :index => true
t.integer :message_id, :integer, :index => true
t.timestamps null: false
end
end
end
9 changes: 9 additions & 0 deletions db/migrate/20160429091553_create_user_message_ships.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
class CreateUserMessageShips < ActiveRecord::Migration
def change
create_table :user_message_ships do |t|
t.integer :user_id, :integer, :index => true
t.integer :message_id, :integer, :index => true
t.timestamps null: false
end
end
end
35 changes: 34 additions & 1 deletion db/schema.rb
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@
#
# It's strongly recommended that you check this file into your version control system.

ActiveRecord::Schema.define(version: 20150728165437) do
ActiveRecord::Schema.define(version: 20160429091553) do

create_table "comments", force: :cascade do |t|
t.text "content"
Expand All @@ -23,6 +23,17 @@

add_index "comments", ["message_id"], name: "index_comments_on_message_id"

create_table "likes", force: :cascade do |t|
t.integer "user_id"
t.integer "integer"
t.integer "message_id"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
end

add_index "likes", ["message_id"], name: "index_likes_on_message_id"
add_index "likes", ["user_id"], name: "index_likes_on_user_id"

create_table "messages", force: :cascade do |t|
t.string "title"
t.text "content"
Expand All @@ -36,6 +47,28 @@
add_index "messages", ["status"], name: "index_messages_on_status"
add_index "messages", ["user_id"], name: "index_messages_on_user_id"

create_table "subscriptions", force: :cascade do |t|
t.integer "user_id"
t.integer "integer"
t.integer "message_id"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
end

add_index "subscriptions", ["message_id"], name: "index_subscriptions_on_message_id"
add_index "subscriptions", ["user_id"], name: "index_subscriptions_on_user_id"

create_table "user_message_ships", force: :cascade do |t|
t.integer "user_id"
t.integer "integer"
t.integer "message_id"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
end

add_index "user_message_ships", ["message_id"], name: "index_user_message_ships_on_message_id"
add_index "user_message_ships", ["user_id"], name: "index_user_message_ships_on_user_id"

create_table "users", force: :cascade do |t|
t.string "email", default: "", null: false
t.string "encrypted_password", default: "", null: false
Expand Down
10 changes: 8 additions & 2 deletions lib/tasks/dev.rake
Original file line number Diff line number Diff line change
Expand Up @@ -16,12 +16,18 @@ namespace :dev do
:status => ["pending", "completed"].sample,
:content => Faker::Lorem.paragraph,
:user => users.sample,
:created_at => Time.now - rand(30).days )
:created_at => Time.now - rand(30).days
)
2.times do
m.likes.create!(:user => users.sample)
m.subscriptions.create!(:user => users.sample)
end

5.times do
m.comments.create!( :content => Faker::Lorem.paragraph,
:user => users.sample )
end
end
end

end
end
5 changes: 5 additions & 0 deletions spec/models/like_spec.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
require 'rails_helper'

RSpec.describe Like, type: :model do
pending "add some examples to (or delete) #{__FILE__}"
end
5 changes: 5 additions & 0 deletions spec/models/subscription_spec.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
require 'rails_helper'

RSpec.describe Subscription, type: :model do
pending "add some examples to (or delete) #{__FILE__}"
end
5 changes: 5 additions & 0 deletions spec/models/user_message_ship_spec.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
require 'rails_helper'

RSpec.describe UserMessageShip, type: :model do
pending "add some examples to (or delete) #{__FILE__}"
end