Rails: 如何在 Orders#create 中访问会话参数/ActiveRecord::StatementInvalid
Rails: How to access session parameter / ActiveRecord::StatementInvalid in Orders#create
我正在为订单下达部分开发一个多步骤表单,该部分使用会话 session[:order_params]
在提交之前存储所有表单输入。
我需要能够从会话访问特定参数 (land),以便在返回表单时查询另一个资源 (shippingservice)。
在我的 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,我想知道如何仅向查询提供该值。
提前致谢!
要设置会话变量,您可以在控制器操作中设置一些数据
例如:
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
根据 post 中提到的描述,您想要访问存储在会话中特定密钥的特定密钥。
假设 order_params 是一个散列,您可以使用下面提到的代码得到 land_id:
session[:order_params][:land_id]
这将 return land_id 的值,因此您可以在查询中使用它。
我正在为订单下达部分开发一个多步骤表单,该部分使用会话 session[:order_params]
在提交之前存储所有表单输入。
我需要能够从会话访问特定参数 (land),以便在返回表单时查询另一个资源 (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,我想知道如何仅向查询提供该值。
提前致谢!
要设置会话变量,您可以在控制器操作中设置一些数据 例如: 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
根据 post 中提到的描述,您想要访问存储在会话中特定密钥的特定密钥。
假设 order_params 是一个散列,您可以使用下面提到的代码得到 land_id:
session[:order_params][:land_id]
这将 return land_id 的值,因此您可以在查询中使用它。