Add Sluggable concern and unique validation to Budget, Group and Heading
* What: We need to generate slug on Budget, Group and Heading classes, validating its unique for its scope * How: Adding a presence and unique validation using Budget always as scope.
This commit is contained in:
@@ -1,13 +1,15 @@
|
|||||||
class Budget < ActiveRecord::Base
|
class Budget < ActiveRecord::Base
|
||||||
|
|
||||||
include Measurable
|
include Measurable
|
||||||
|
include Sluggable
|
||||||
|
|
||||||
PHASES = %w(accepting reviewing selecting valuating balloting reviewing_ballots finished).freeze
|
PHASES = %w(accepting reviewing selecting valuating balloting reviewing_ballots finished).freeze
|
||||||
CURRENCY_SYMBOLS = %w(€ $ £ ¥).freeze
|
CURRENCY_SYMBOLS = %w(€ $ £ ¥).freeze
|
||||||
|
|
||||||
validates :name, presence: true
|
validates :name, presence: true, uniqueness: true
|
||||||
validates :phase, inclusion: { in: PHASES }
|
validates :phase, inclusion: { in: PHASES }
|
||||||
validates :currency_symbol, presence: true
|
validates :currency_symbol, presence: true
|
||||||
|
validates :slug, presence: true, format: /\A[a-z0-9\-_]+\z/
|
||||||
|
|
||||||
has_many :investments, dependent: :destroy
|
has_many :investments, dependent: :destroy
|
||||||
has_many :ballots, dependent: :destroy
|
has_many :ballots, dependent: :destroy
|
||||||
|
|||||||
@@ -1,10 +1,14 @@
|
|||||||
class Budget
|
class Budget
|
||||||
class Group < ActiveRecord::Base
|
class Group < ActiveRecord::Base
|
||||||
|
include Sluggable
|
||||||
|
|
||||||
belongs_to :budget
|
belongs_to :budget
|
||||||
|
|
||||||
has_many :headings, dependent: :destroy
|
has_many :headings, dependent: :destroy
|
||||||
|
|
||||||
validates :budget_id, presence: true
|
validates :budget_id, presence: true
|
||||||
validates :name, presence: true
|
validates :name, presence: true, uniqueness: { scope: :budget }
|
||||||
|
validates :slug, presence: true, format: /\A[a-z0-9\-_]+\z/
|
||||||
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@@ -1,12 +1,15 @@
|
|||||||
class Budget
|
class Budget
|
||||||
class Heading < ActiveRecord::Base
|
class Heading < ActiveRecord::Base
|
||||||
|
include Sluggable
|
||||||
|
|
||||||
belongs_to :group
|
belongs_to :group
|
||||||
|
|
||||||
has_many :investments
|
has_many :investments
|
||||||
|
|
||||||
validates :group_id, presence: true
|
validates :group_id, presence: true
|
||||||
validates :name, presence: true
|
validates :name, presence: true, uniqueness: { if: :name_exists_in_budget_headings }
|
||||||
validates :price, presence: true
|
validates :price, presence: true
|
||||||
|
validates :slug, presence: true, format: /\A[a-z0-9\-_]+\z/
|
||||||
|
|
||||||
delegate :budget, :budget_id, to: :group, allow_nil: true
|
delegate :budget, :budget_id, to: :group, allow_nil: true
|
||||||
|
|
||||||
@@ -16,5 +19,9 @@ class Budget
|
|||||||
"#{group.name}: #{name}"
|
"#{group.name}: #{name}"
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def name_exists_in_budget_headings
|
||||||
|
group.budget.headings.where(name: name).any?
|
||||||
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
Reference in New Issue
Block a user