الوصول إلى Flash Rails [: إشعار] في نموذج
-
01-10-2019 - |
سؤال
أحاول تعيين رسالة إلى Flash [: إشعار] في مراقب النموذج.
لقد تم طرح هذا السؤال بالفعل: Ruby on Rails: المراقبون وفلاش [: إشعار]؟
ومع ذلك ، أحصل على رسالة الخطأ التالية عندما أحاول الوصول إليها في النموذج الخاص بي:
undefined local variable or method `flash' for #<ModelObserver:0x2c1742c>
ها هو رمزتي:
class ModelObserver < ActiveRecord::Observer
observe A, B, C
def after_save(model)
puts "Model saved"
flash[:notice] = "Model saved"
end
end
أعلم أن الطريقة يتم استدعاؤها لأن "النموذج المحفوظ" يتم طباعته إلى المحطة.
هل من الممكن الوصول إلى الفلاش داخل مراقب ، وإذا كان الأمر كذلك ، فكيف؟
المحلول
كنت بحاجة لضبط flash[:notice]
في النموذج لتجاوز عام "تم تحديث model".
هذا ما فعلته
- أنشأت سمة افتراضية في النموذج المعني المسمى
flash_notice
- ثم قمت بتعيين السمة الافتراضية في النموذج المعني عند الحاجة
- استخدم بعد ذلك عندما لم تكن هذه السمة الافتراضية فارغة لتجاوز الفلاش الافتراضي
يمكنك رؤية وحدة التحكم الخاصة بي ونموذجها كيف أنجزت هذا أدناه:
class Reservation < ActiveRecord::Base
belongs_to :retailer
belongs_to :sharedorder
accepts_nested_attributes_for :sharedorder
accepts_nested_attributes_for :retailer
attr_accessor :validation_code, :flash_notice
validate :first_reservation, :if => :new_record_and_unvalidated
def new_record_and_unvalidated
if !self.new_record? && !self.retailer.validated?
true
else
false
end
end
def first_reservation
if self.validation_code != "test" || self.validation_code.blank?
errors.add_to_base("Validation code was incorrect")
else
self.retailer.update_attribute(:validated, true)
self.flash_notice = "Your validation as successful and you will not need to do that again"
end
end
end
class ReservationsController < ApplicationController
before_filter :authenticate_retailer!
after_filter :flash_notice, :except => :index
def flash_notice
if !@reservation.flash_notice.blank?
flash[:notice] = @reservation.flash_notice
end
end
end
نصائح أخرى
لا ، قمت بتعيينه في وحدة التحكم حيث يحدث الادخار. flash
هي طريقة محددة في ActionController::Base
.
لا تنتمي إلى StackOverflow