diff --git a/app/models/budget.rb b/app/models/budget.rb index bc7231f29..efb88e62a 100644 --- a/app/models/budget.rb +++ b/app/models/budget.rb @@ -1,13 +1,15 @@ class Budget < ActiveRecord::Base include Measurable + include Sluggable PHASES = %w(accepting reviewing selecting valuating balloting reviewing_ballots finished).freeze CURRENCY_SYMBOLS = %w(€ $ £ ¥).freeze - validates :name, presence: true + validates :name, presence: true, uniqueness: true validates :phase, inclusion: { in: PHASES } validates :currency_symbol, presence: true + validates :slug, presence: true, format: /\A[a-z0-9\-_]+\z/ has_many :investments, dependent: :destroy has_many :ballots, dependent: :destroy diff --git a/app/models/budget/group.rb b/app/models/budget/group.rb index dd7910950..93d7bba63 100644 --- a/app/models/budget/group.rb +++ b/app/models/budget/group.rb @@ -1,10 +1,14 @@ class Budget class Group < ActiveRecord::Base + include Sluggable + belongs_to :budget has_many :headings, dependent: :destroy 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 \ No newline at end of file +end diff --git a/app/models/budget/heading.rb b/app/models/budget/heading.rb index a81308947..1a232c75e 100644 --- a/app/models/budget/heading.rb +++ b/app/models/budget/heading.rb @@ -1,12 +1,15 @@ class Budget class Heading < ActiveRecord::Base + include Sluggable + belongs_to :group has_many :investments 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 :slug, presence: true, format: /\A[a-z0-9\-_]+\z/ delegate :budget, :budget_id, to: :group, allow_nil: true @@ -16,5 +19,9 @@ class Budget "#{group.name}: #{name}" end + def name_exists_in_budget_headings + group.budget.headings.where(name: name).any? + end + end end