Изменение значения from_address

#ruby-on-rails #spree

#ruby-on-rails #веселье

Вопрос:

Я пытаюсь изменить Spree 3.0 из_email

Я добавил эту строку в свой инициализатор spree, но он не работает:

 Spree::Store.current.mail_from_address = “x@x.com"
  

Знаете ли вы какую-либо причину, почему нет?

Я также поместил его непосредственно в свой декоратор почтовой программы:

 Spree::OrderMailer.class_eval do
  def confirm_email_to_store(order, resend = false)
    Spree::Store.current.mail_from_address = "x@x.com"
    @order = order.respond_to?(:id) ? order : Spree::Order.find(order)
    subject = (resend ? "[#{Spree.t(:resend).upcase}] " : '')
    subject  = "#{'Will Call' if @order.will_call} #{'Just to See' if @order.just_to_see} ##{@order.number}"
    mail(to: ENV['STORE_EMAIL'], from: from_address, subject: subject)
  end
end
  

Это также не сработало

Ответ №1:

Проверьте, возможно, вы создали несколько хранилищ, проверив Spree::Store.all

Кроме того, spree использует текущее хранилище в качестве хранилища, которое обновлялось последним, поэтому вы также должны это проверить

Комментарии:

1. Spree::Store.all -, код: «spree», по умолчанию: true, created_at: «2016-09-30 17:02:03», обновленный_ат: «2016-09-30 17:02:03»>]>

2. Я смог настроить это через панель администратора, и конфигурация сохранилась

3. mail_from_address: «spree@example.com » это не обновлено, проверьте это

Ответ №2:

Вы можете просто изменить адрес электронной почты from в панели администратора в разделе Конфигурация -> Общие настройки:

Панель администратора Spree -> Конфигурация -> Общие настройки

Ответ №3:

Заставил это работать таким образом:

Spree::Store.current.update(mail_from_address: ENV["STORE_EMAIL"])

Глядя здесь http://www.davidverhasselt.com/set-attributes-in-activerecord / вы можете видеть, что:

user.name = «Ограбить»

Это обычное назначение является наиболее распространенным и простым в использовании. Это средство доступа для записи по умолчанию, созданное Rails. Атрибут name будет помечен как «грязный», и изменение еще не будет отправлено в базу данных.

Конечно, инициализаторы spree утверждают, что они сохраняют в базе данных, но это не так:

Если здесь задано предпочтение, оно будет сохранено в кэше и базе данных при инициализации.

Наконец, вызов Spree::Store.current извлечет данные из базы данных, поэтому все несохраненные изменения будут потеряны:

 scope :by_url, lambda { |url| where("url like ?", "%#{url}%") }

def self.current(domain = nil)
  current_store = domain ? Store.by_url(domain).first : nil
  current_store || Store.default
end
  

Исправление этой ошибки в Spree было бы предпочтительным, это своего рода обходной путь