From 92bcf34c527098c09f0c6eb272a6fdf671dbb9c4 Mon Sep 17 00:00:00 2001 From: Hong Chulju Date: Thu, 28 Aug 2014 00:35:51 +0900 Subject: [PATCH 1/2] validation added. parent presence validation, title presence, uniqueness (especially, project) (w/o join table) --- app/models/comment.rb | 3 +++ app/models/history.rb | 4 ++++ app/models/project.rb | 7 +++++-- app/models/todo.rb | 4 ++++ app/models/user.rb | 10 +++++----- 5 files changed, 21 insertions(+), 7 deletions(-) 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..1d6b4e4 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: true 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 From ebee19b7c207b045f10ccd96117aa5adc01e8a9f Mon Sep 17 00:00:00 2001 From: Hong ChulJu Date: Mon, 1 Sep 2014 02:04:31 +0900 Subject: [PATCH 2/2] project title should be unique for each user --- app/controllers/projects_controller.rb | 15 +++++++++------ app/models/project.rb | 2 +- 2 files changed, 10 insertions(+), 7 deletions(-) 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/project.rb b/app/models/project.rb index 1d6b4e4..8b7d041 100644 --- a/app/models/project.rb +++ b/app/models/project.rb @@ -7,7 +7,7 @@ class Project < ActiveRecord::Base has_many :histories, inverse_of: :project validates :user, presence: true - validates :title, presence: true, uniqueness: true + validates :title, presence: true, uniqueness: { scope: :user } def fetch_members_by_nickname(nickname, count) members = assignees.arel_table