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
Post a Comment