Better form validation

This commit is contained in:
Matt Barringer 2013-01-16 08:22:20 +01:00
parent fb24dfb129
commit 627e3b7b5f
3 changed files with 28 additions and 9 deletions

View file

@ -1,9 +1,15 @@
class ProposalController < ApplicationController class ProposalController < ApplicationController
before_filter :verify_user before_filter :verify_user
before_filter :setup
before_filter :verify_access, :only => [:edit, :update, :destroy, :confirm] before_filter :verify_access, :only => [:edit, :update, :destroy, :confirm]
def verify_access def setup
@person = current_user.person @person = current_user.person
@url = conference_proposal_index_path(@conference.short_title)
@event_types = @conference.event_types
end
def verify_access
if params.has_key? :proposal_id if params.has_key? :proposal_id
params[:id] = params[:proposal_id] params[:id] = params[:proposal_id]
end end
@ -21,7 +27,6 @@ class ProposalController < ApplicationController
end end
def index def index
@person = current_user.person
@events = @person.proposals @conference @events = @person.proposals @conference
end end
@ -31,10 +36,7 @@ class ProposalController < ApplicationController
end end
def new def new
@url = conference_proposal_index_path(@conference.short_title)
@event = Event.new @event = Event.new
@event_types = @conference.event_types
@person = current_user.person
end end
def edit def edit
@ -75,13 +77,26 @@ class ProposalController < ApplicationController
submitter = params[:person] submitter = params[:person]
params[:event].delete :person params[:event].delete :person
@event = Event.new(event_params)
@event.conference = @conference
if submitter[:public_name].blank?
flash[:error] = "Your public name cannot be blank."
render :action => "new"
return
end
if submitter[:biography].blank?
flash[:error] = "Your biography cannot be blank."
render :action => "new"
return
end
# First, update the submitter's info, if they've changed anything # First, update the submitter's info, if they've changed anything
if submitter[:public_name] != person.public_name || submitter[:biography] != person.biography if submitter[:public_name] != person.public_name || submitter[:biography] != person.biography
person.update_attributes(submitter) person.update_attributes(submitter)
end end
@event = Event.new(event_params)
@event.conference = @conference
@event.event_people.new(:person => person, @event.event_people.new(:person => person,
:event_role => "submitter") :event_role => "submitter")
@event.event_people.new(:person => person, @event.event_people.new(:person => person,

View file

@ -14,11 +14,14 @@ class Event < ActiveRecord::Base
belongs_to :room belongs_to :room
belongs_to :conference belongs_to :conference
accepts_nested_attributes_for :event_people accepts_nested_attributes_for :event_people, :allow_destroy => true
accepts_nested_attributes_for :event_attachments, :allow_destroy => true, :reject_if => :all_blank accepts_nested_attributes_for :event_attachments, :allow_destroy => true, :reject_if => :all_blank
accepts_nested_attributes_for :people accepts_nested_attributes_for :people
before_create :generate_guid before_create :generate_guid
validate :abstract_limit validate :abstract_limit
validates :title, :presence => true
validates :abstract, :presence => true
state_machine :initial => :new do state_machine :initial => :new do
state :new state :new

View file

@ -4,6 +4,7 @@ class Person < ActiveRecord::Base
has_many :event_people, :dependent => :destroy has_many :event_people, :dependent => :destroy
has_many :events, :through => :event_people, :uniq => true has_many :events, :through => :event_people, :uniq => true
has_many :registrations, :dependent => :destroy has_many :registrations, :dependent => :destroy
validates :first_name, :presence => true validates :first_name, :presence => true
validates :last_name, :presence => true validates :last_name, :presence => true
validate :biography_limit validate :biography_limit
@ -65,7 +66,7 @@ class Person < ActiveRecord::Base
end end
def set_public_name def set_public_name
if public_name.empty? if public_name.blank?
self.public_name = "#{first_name} #{last_name}" self.public_name = "#{first_name} #{last_name}"
end end
end end