Как отображать флеш-сообщения в сервисном объекте rails - PullRequest
1 голос
/ 14 мая 2019

Я хочу добавить сервисные объекты в мой контроллер. Есть ли шанс включить флэш-сообщения в этот сервисный объект?

user_stocks_controller

class UserStocksController < ApplicationController
  def create
    @user_stock = UserStocksCreator.new(current_user, params).call
    redirect_to my_portfolio_path
  end
end

объекты обслуживания user_stocks_creator

class UserStocksCreator
  def initialize(current_user, params)
    @current_user = current_user
    @params = params[:stock_ticker]
  end

  def call
    stock = Stock.find_by_ticker(params)
    if stock.blank?
      stock = Stock.new_from_lookup(params)
      stock.save
    end
    @user_stock = UserStock.create(user: current_user, stock: stock)
    flash[:success] = "Stock #{@user_stock.stock.name} was successfully added to portfolio"
  end

  private

  attr_accessor :current_user, :params
end

С этим кодом у меня ошибка:

неопределенная локальная переменная или метод `flash '

1 Ответ

2 голосов
/ 14 мая 2019

Метод flash доступен только в контроллере.Если вы хотите установить флэш-память в сервисном объекте, вам нужно передать флэш-память сервисному объекту.

# in the controller
def create
  @user_stock = UserStocksCreator.new(current_user, params, flash).call
  redirect_to my_portfolio_path
end

# in the service
class UserStocksCreator
  def initialize(current_user, params, flash)
    @current_user = current_user
    @params = params[:stock_ticker]
    @flash = flash
  end

  def call
    # unchanged...
  end

  private

  attr_accessor :current_user, :params, :flash
end
...