Cannot access model method inside its controller in Rails -


in rails app, have controller tickets_controller.rb , model ticket.rb. creating ticket have following form,

<%= form_for(@ticket) |f| %>   <% if @ticket.errors.any? %>     <div id="error_explanation">       <h2><%= pluralize(@ticket.errors.count, "error") %> prohibited ticket being saved:</h2>        <ul>       <% @ticket.errors.full_messages.each |msg| %>         <li><%= msg %></li>       <% end %>       </ul>     </div>   <% end %>      <%= f.label :ref_no, "reference number"%><br/>     <%= f.text_field :ref_no%><br />      <%= f.label :category, "type of request"%><br/>     <%= f.text_field :category_id %><br />      <%= f.label :issue, "issue"%><br/>     <%= f.text_area :issue%><br />      <%= f.label :ticket_priority, "priority level"%><br/>     <%= f.text_field :ticket_priority_id %><br />      <%= f.label :ticket_status, "current status"%><br/>     <%= f.text_field :ticket_status_id %><br />      <%= f.label :project, "project"%><br/>     <%= f.text_field :project_id %><br />    <div class="actions">     <%= f.submit %>   </div> <% end %> 

i want create unique random reference number on form_load (ticket/new), , should appended reference number text field. while creating new reference number, should check tickets table duplication. have following model,

ticket.rb

class ticket < activerecord::base    attr_accessible :issue, :ticket_status_id, :ticket_priority_id, :ref_no, :category_id, :project_id   has_many :ticket_statuses , :through => :ticket_histories   has_one :ticket_priority   belongs_to :user    before_create :generate_token    protected     def generate_num     self.token = loop       random_token = random(1000000000)       break random_token unless ticket.exists?(:ref_no => random_token)     end   end  end 

and

tickets_controller.rb

class ticketscontroller < applicationcontroller    before_filter :authenticate_user!   #load_and_authorize_resource    def index     @tickets = ticket.all      respond_to |format|       format.html # index.html.erb       format.json { render :json => @tickets }     end   end     def show     @ticket = ticket.find(params[:id])      respond_to |format|       format.html # show.html.erb       format.json { render :json => @ticket }     end   end     def new     @ticket = ticket.new      @ref_no = ticket.generate_num      @categories = category.all     @status = ticketstatus.first     @priorities = ticketpriority.all     respond_to |format|       format.html # new.html.erb       format.json { render :json => @ticket }     end   end     def edit     @ticket = ticket.find(params[:id])   end     def create     @ticket = ticket.new(params[:ticket])     respond_to |format|       if @ticket.save         format.html { redirect_to @ticket, :notice => 'ticket created.' }         format.json { render :json => @ticket, :status => :created, :location => @ticket }       else         format.html { render :action => "new" }         format.json { render :json => @ticket.errors, :status => :unprocessable_entity }       end     end   end    def update     @ticket = ticket.find(params[:id])      respond_to |format|       if @ticket.update_attributes(params[:ticket])         format.html { redirect_to @ticket, :notice => 'ticket updated.' }         format.json { head :no_content }       else         format.html { render :action => "edit" }         format.json { render :json => @ticket.errors, :status => :unprocessable_entity }       end     end   end     def destroy     @ticket = ticket.find(params[:id])     @ticket.destroy      respond_to |format|       format.html { redirect_to tickets_url }       format.json { head :no_content }     end   end end 

when run app, getting following error. can help?

 nomethoderror in ticketscontroller#new  undefined method `generate_num' #<class:0x7f5cdc1f21c0>  rails.root: /home/local/rajesh/ticket_system application trace | framework trace | full trace  app/controllers/tickets_controller.rb:27:in `new' 

change model method generate_num self.generate_num.

def self.generate_num     token = loop       random_token = random(1000000000)       break random_token unless ticket.exists?(:ref_no => random_token)     end end 

Comments

Popular posts from this blog

linux - xterm copying to CLIPBOARD using copy-selection causes automatic updating of CLIPBOARD upon mouse selection -

c++ - qgraphicsview horizontal scrolling always has a vertical delta -