1

У меня есть два обратных вызова, которые не работают в моей модели. Они также не поднимают никаких сообщений об ошибках.Обратный звонок не работает

Первый обратный звонок: after_update :state_closed, и я хочу использовать это, чтобы закрыть билет, когда я выбираю состояние билета из вида «разрешено» или «отменено». Итак, я хочу, чтобы в этом случае он был закрыт.

Второй обратный вызов - after_create :assign_state, и я хочу использовать это, чтобы сказать, что билет назначен или его не присвоен, поэтому, если employee_id пуст, это означает, что билет не назначен любому сотруднику. Если employee_id не черный, так этот билет назначен

Вот мой ticket.rb

class Ticket < ActiveRecord::Base 
    before_save :default_values 
    after_update :state_closed 
    after_create :assign_state 

    attr_accessible :description, :title, :employee_department_id, :user_id, :first_name, 
:last_name , :email, :state_id, :employee_id, :ticket_state, :assign_state 


    belongs_to :employee_department 
    belongs_to :user 
    belongs_to :state 
    belongs_to :employee 

    has_many :replies 

    def default_values 
    self.state_id = 3 if self.state_id.nil? 
    end 

    def to_label 
    ticket_state.to_s 
    end 

    def state_closed 
    if self.ticket_state == "Solved" || self.ticket_state == "Canceled" 
     self.ticket_state = "Closed" 
     self.save 
    end 
    end 

    def assign_state 
    if self.employee_id.nil? 
     self.assign_state = "Un-assigned" 
    else 
     self.assign_state = "Assigned" 
    end 
    end 

    Ticket.all.each do |ticket| 
    if ticket.ticket_state.blank? 
     ticket.ticket_state = 'open' 
    end 
    ticket.save 
    end 
    ... 

Это из журналов сервера, когда я выбираю «решить», например, она обновляется «решена», если мои обратные вызовы работают, то в этом случае она должна измениться от решения к закрытым, но этого не происходит

Started PUT "/tickets/1" for 127.0.0.1 at 2013-09-14 21:46:54 +0200 
Processing by TicketsController#update as HTML 
    Parameters: {"utf8"=>"✓", "authenticity_token"=>"LZRTSjq9EWqgG6ub3xpd7fioWNtY1SSzy5XQA8ZNep0=", "ticket"=>{"ticket_state"=>"solved"}, "id"=>"1"} 
    User Load (0.3ms) SELECT "users".* FROM "users" WHERE "users"."id" = 1 LIMIT 1 
    State Load (0.1ms) SELECT "states".* FROM "states" 
    Ticket Load (0.1ms) SELECT "tickets".* FROM "tickets" WHERE "tickets"."id" = ? LIMIT 1 [["id", "1"]] 
    (0.0ms) begin transaction 
    (0.2ms) UPDATE "tickets" SET "ticket_state" = 'solved', "updated_at" = '2013-09-14 19:46:54.926307' WHERE "tickets"."id" = 1 
    (95.2ms) commit transaction 
Redirected to http://localhost:3000/tickets 
Completed 302 Found in 100ms (ActiveRecord: 96.0ms) 
+0

сначала проверьте, вызваны ли эти два метода или нет –

+0

И вы можете написать некоторые сообщения на консоль из методов, чтобы проверить, попадают ли они ... Кроме того, вы можете нанести удар по конец сохранения временно, что вызовет более заметную ошибку, если билет не будет успешно сохранен. – snowangel

+0

Кроме того, используйте self.update_column (: ticket_state, «Закрыто»), чтобы избежать повторного вызова после повторного обновления после сохранения в методе обратного вызова. Update_column не вызывает проверки или обратные вызовы: save делает. – snowangel

ответ

1

проблемы, с каждым следующим образом:

state_closed является не вызываемый из-за проблемы с капитализацией: «разрешенный» не равен «разрешен». Измените заглавные буквы для сопоставления или сравните строки, когда они оба сбиты.

assign_state, вероятно, называется, но не сохраняется, потому что вы никогда не сохраняете модель после ее изменения. Попробуйте сохранить после обновления при создании.

+0

есть ли способ сделать 'assign_state' для текущих билетов и новых билетов, которые будут созданы? –

+0

Конечно, вы можете использовать обратный вызов с' on :: create', чтобы убедиться, что он установлен.http://guides.rubyonrails.org/v3.2.13/active_record_validations_callbacks.html#on. Или вы можете просто использовать 'before_create' вместо' after_create'. – tyler

+0

, а как насчет текущего созданного, будет только обновление? –

Смежные вопросы