Rails: как получить доступ к параметру сеанса / ActiveRecord :: StatementInvalid в Orders # create - PullRequest
0 голосов
/ 28 декабря 2018

Я работаю над многошаговой формой для секции размещения заказа, которая использует сеанс session[:order_params] для хранения всех входных данных формы перед отправкой.

Мне нужно иметь доступ к определенному параметру (земле) изсеанс, чтобы запросить другой ресурс (shippingservice) при переходе назад в форме.

В моем orders_controller.rb у меня есть:

@shippingservices = @cart.available_shipping_services.joins(:lands).where(:lands => {:id => params[:id]})

, но необходимо указать землю.идентификатор из session[:order_params].

При использовании session[:order_params] я получаю ActiveRecord::StatementInvalid in Orders#create:

Mysql::Error: Unknown column 'id.ship_to_last_name' in 'where clause': SELECT `shippingservices`.* FROM `shippingservices` 
INNER JOIN `zones` ON `zones`.`id` = `shippingservices`.`zone_id` 
INNER JOIN `lands_zones` ON `lands_zones`.`zone_id` = `zones`.`id` 
INNER JOIN `lands` ON `lands`.`id` = `lands_zones`.`land_id` 
WHERE `id`.`ship_to_last_name` = 'Smith' 
AND `id`.`ship_to_address` = 'Somewherestreet' 
AND `id`.`ship_to_city` = 'Nowheretown' 
AND `id`.`ship_to_postal_code` = '99999' 
AND `id`.`phone_number` = 'some number' 
AND `id`.`shippingservice_id` = '34' 
AND `id`.`email` = 'someone@example.tld' 
AND `id`.`land_id` = '85' 
AND `id`.`ship_to_first_name` = 'John' 
AND (weightmin <= 200 AND weightmax >= 200 AND heightmin <= 12 AND heightmax >= 12 AND shippingservices.shippingcarrier = '1') AND (lengthmax >= 210 AND widthmax >= 149)

Поскольку присутствует правильный land_id, мне интересно, как предоставить только это значение длязапрос.

Заранее спасибо!

Ответы [ 2 ]

0 голосов
/ 28 декабря 2018

Согласно описанию, упомянутому в посте, вы хотите получить доступ к определенному ключу, хранящемуся в сеансе с конкретным ключом.

Предполагая, что order_params является хешем, вы можете получить land_id, используя указанный ниже код:

session[:order_params][:land_id]

Это вернет значение land_id и, следовательно, вы можете использовать его в запросе.

0 голосов
/ 28 декабря 2018

Чтобы установить переменную сеанса, вы можете установить некоторые данные в действии контроллера. Например: app / controllers / session_controller.rb

def create
  # ...
  session[:current_user_id] = @user.id
  # ...
end

И прочитать это в другом: app / controllers / users_controller.rb

def index
  current_user = User.find_by_id(session[:current_user_id])
  # ...
end
...