【问题标题】:Rails: How to access session parameter / ActiveRecord::StatementInvalid in Orders#createRails:如何在 Orders#create 中访问会话参数/ActiveRecord::StatementInvalid
【发布时间】:2018-12-28 11:10:50
【问题描述】:

我正在为下单部分制作一个多步骤表单,该表单使用会话 session[:order_params] 在提交之前存储所有表单输入。

我需要能够从会话中访问特定参数(土地),以便在返回表单时查询另一个资源(运输服务)。

在我的orders_controller.rb 我有:

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

但需要从session[:order_params] 指定land.id。

当使用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,我想知道如何仅向查询提供该值。

提前谢谢你!

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-3 session activerecord session-variables


    【解决方案1】:

    根据帖子中提到的描述,您希望访问存储在会话中特定密钥的特定密钥。

    假设 order_params 是一个哈希,您可以使用下面提到的代码获取 land_id:

    session[:order_params][:land_id]
    

    这将返回land_id 的值,因此您可以在查询中使用它。

    【讨论】:

    【解决方案2】:

    要设置会话变量,您可以在控制器操作中设置一些数据 例如: app/controllers/sessions_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
    

    【讨论】:

    • 感谢您的回复。我知道,但在这种情况下,我需要访问保存在 order_params 中的值,还是您的意思是我必须创建另一个会话或指定另一个会话?
    猜你喜欢
    • 1970-01-01
    • 2013-10-31
    • 2013-09-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-11
    • 2022-11-26
    • 2018-03-08
    相关资源
    最近更新 更多