У меня есть два обратных вызова, которые не работают в моей модели. Они также не поднимают никаких сообщений об ошибках.Обратный звонок не работает
Первый обратный звонок: 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)
сначала проверьте, вызваны ли эти два метода или нет –
И вы можете написать некоторые сообщения на консоль из методов, чтобы проверить, попадают ли они ... Кроме того, вы можете нанести удар по конец сохранения временно, что вызовет более заметную ошибку, если билет не будет успешно сохранен. – snowangel
Кроме того, используйте self.update_column (: ticket_state, «Закрыто»), чтобы избежать повторного вызова после повторного обновления после сохранения в методе обратного вызова. Update_column не вызывает проверки или обратные вызовы: save делает. – snowangel