diff --git a/app/controllers/projects_controller.rb b/app/controllers/projects_controller.rb index 3428bd0..bf460f0 100644 --- a/app/controllers/projects_controller.rb +++ b/app/controllers/projects_controller.rb @@ -15,29 +15,30 @@ def index def create @project = Project.new(project_params) - @project.user_id = current_user.id - - + @project.user = current_user + @users = User.all + if @project.save #associate_project_with_todos! associate_project_with_assignees! SlackNotifier.notify("프로젝트 추가되었어용 : #{@project.title} (#{Rails.application.routes.url_helpers.project_url(@project)})") MailSender.send_email_when_create(current_user.email, @project) + redirect_to projects_path + else + flash[:error] = @project.errors.full_messages.join('\n') + render 'new' end - redirect_to projects_path end def detail @project = Project.find(params[:id]) - end def show @todo = Todo.new @todos = Todo.where(project_id: params[:id]) @histories = History.where(project_id: params[:id]) - end def edit @@ -48,6 +49,7 @@ def edit def update @project = Project.find(params[:id]) + @users = User.all if @project.update(project_params) #associate_project_with_todos! @@ -56,6 +58,7 @@ def update SlackNotifier.notify("프로젝트가 수정되었어용 : #{@project.title} (#{Rails.application.routes.url_helpers.project_url(@project)})") redirect_to @project else + flash[:error] = @project.errors.full_messages.join('\n') render 'edit' end end diff --git a/app/models/comment.rb b/app/models/comment.rb index 6be5b17..9d05d8f 100644 --- a/app/models/comment.rb +++ b/app/models/comment.rb @@ -1,4 +1,7 @@ class Comment < ActiveRecord::Base belongs_to :user belongs_to :history + + validates :contents, presence: true + validates :user, presence: true end diff --git a/app/models/history.rb b/app/models/history.rb index 684bf60..fd97b74 100644 --- a/app/models/history.rb +++ b/app/models/history.rb @@ -22,6 +22,10 @@ class History < ActiveRecord::Base has_many :inverse_history_histories, class_name: "HistoryHistory", foreign_key: "referencing_history_id" has_many :referenced_histories, through: :inverse_history_histories, source: :history + validate :user, presence: true + validate :project, presence: true + validate :title, presence: true + include PublicActivity::Model tracked :except => :destroy has_many :activities, as: :trackable, class_name: 'PublicActivity::Activity', dependent: :destroy diff --git a/app/models/project.rb b/app/models/project.rb index 30e7d47..8b7d041 100644 --- a/app/models/project.rb +++ b/app/models/project.rb @@ -3,8 +3,11 @@ class Project < ActiveRecord::Base has_many :assignees, through: :project_users belongs_to :user - has_many :todos - has_many :histories + has_many :todos, inverse_of: :project + has_many :histories, inverse_of: :project + + validates :user, presence: true + validates :title, presence: true, uniqueness: { scope: :user } def fetch_members_by_nickname(nickname, count) members = assignees.arel_table diff --git a/app/models/todo.rb b/app/models/todo.rb index dd1e481..e8b1d41 100644 --- a/app/models/todo.rb +++ b/app/models/todo.rb @@ -6,6 +6,10 @@ class Todo < ActiveRecord::Base has_many :histories, through: :history_todos belongs_to :user belongs_to :project + + validates :project, presence: true + validates :user, presence: true + validates :title, presence: true def self.fetch_list_from(id, count) where(arel_table[:id].gteq(id)).take(count) diff --git a/app/models/user.rb b/app/models/user.rb index 9715d4e..cfe6306 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -1,8 +1,10 @@ class User < ActiveRecord::Base # Include default devise modules. Others available are: # :confirmable, :lockable, :timeoutable and :omniauthable - has_many :histories - has_many :todos + has_many :histories, inverse_of: :user + has_many :todos, inverse_of: :user + has_many :projects, inverse_of: :user + has_many :comments, inverse_of: :user has_many :history_users, foreign_key: :assignee_id has_many :assigned_histories, through: :history_users @@ -12,13 +14,11 @@ class User < ActiveRecord::Base belongs_to :user - belongs_to :comment devise :database_authenticatable, :registerable, :recoverable, :rememberable, :trackable, :validatable, :omniauthable, :omniauth_providers => [:facebook, :google_oauth2, :twitter] - validates_presence_of :nickname - validates_uniqueness_of :nickname + validates :nickname, uniqueness: true, presence: true acts_as_reader