Ilnar25
@Ilnar25

Как сохранить данные гема geocoder в сессий, без сохранения его в базе?

Суть проста. Модель Order имеет адрес своего получателя и отдельно адрес своего отправителя. Задача: как сохранить данные адреса получателя в сессий до создания заказа, так как необходимо провести расчеты стоимости заказа учитывая данные адреса получателя и сохранить их вместе одновременно в модели Order. Хотел бы сохранить его заранее в сессий во избежания лишних update ов базы и просто лишнего create и лишнего find. Просто как лучше реализовать?

class Order < ApplicationRecord
  belongs_to :user, optional: true
  serialize :order_info
 
  geocoded_by :recipient_adress, :latitude  => :recipient_latitude, :longitude => :recipient_longitude
  after_validation :geocode, if: ->(obj){ obj.recipient_adress.present?}
end

class OrdersController < ApplicationController
  include OrderHelper
  before_action :authenticate_user!
  before_action :check_session, only: [:pre_order]

  expose_decorated :orders, ->{current_user.orders}
  expose_decorated :order

  def create
    @order = current_user.orders.build(order_params)
    @order.order_info = session[:cart]
    if @order.save
      redirect_to root_path, notice: "Successfully"
    else
      flash[:notice] = "Please enter a valid address!"
      render 'pre_order'
    end
  end

  def recipient_adress
  end

  def pre_order
    @current_order = session[:cart].values
    @cost_of_shipping = session[:cost_of_shipping]
  end

  def destroy
  end

  def show
    render component: 'Orders', props: { orders: orders }
  end

  private

    def check_session
      redirect_to root_path if session[:cart] == nil
    end

    def order_params
      params.require(:order).permit(:recipient_adress)
    end
end
  • Вопрос задан
  • 123 просмотра
Решения вопроса 1
Ilnar25
@Ilnar25 Автор вопроса
Спасибо! Нашёл ответ. Надо было просто написать в контроллере типо этого
def create
    @order = Order.new(order_params)
    session[:attr] = Geocoder.coordinates(@order.recipient_adress)
  end
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы