ruby on rails - Run block of code only if object found -
is there cleaner way run block of code if object found? i'm testing see if param exists. error out i'm sure if there no object. please excuse ugly code:
def show if params[:event_entry].to_i>1 event_entry = evententry.find(params[:event_entry]) #### event_entry here end end there has better way go am...
an cleaner way (in rails 4) is:
def show if event_entry = evententry.find_by(id: params[:event_entry]) # `event_entry` here end end find_by return nil if record doesn't exist, see: http://api.rubyonrails.org/classes/activerecord/findermethods.html#method-i-find_by
edit:
as mentioned @apneadiving in comment below, nice if done using abstract method call before_filter , start of controller applicable methods (such show, edit, update , delete). i've included example of below.
class evententriescontroller < applicationcontroller before_filter :set_event_entry, only: :show def show # have access @event_entry because set before method called end private def set_event_entry @event_entry = evententry.find_by(id: params[:event_entry]) end end now can add other methods before_filter line @ start of controller gain access @event_entry in methods. like
before_filter :set_event_entry, only: [:show, :edit, :update, :destroy] should trick.
note: may see before_action used in places instead of before_filter. either of these work.
Comments
Post a Comment