我正在尝试将送货地址与我的应用程序中的订单相关联,但无法找到执行此操作的好方法。
这是我的关联:
class ShippingAddress < ActiveRecord::Base
belongs_to :order
end
和
class Order < ActiveRecord::Base
has_one :shipping_address
end
我看到很多例子假设有一个current_user,但我正在尝试进行结帐流程,以便用户不必登录。
以下是我的送货地址控制器的样子:
class ShippingAddressesController < ApplicationController
def new
@shipping_address = ShippingAddress.new
end
def create
@shipping_address = ShippingAddress.new(shipping_address_params)
@shipping_address.save
redirect_to root_url
end
private
def shipping_address_params
params.require(:shipping_address).permit(:shipping_name, :address_line1, :address_line2, :address_city,
:address_state, :address_zip, :address_country, :user_id, :order_id)
end
end
这就是订单控制器的样子:
class OrdersController < ApplicationController
def create
@order = Order.find_or_initialize_by(item_id: params[:order][:item_id], order_completed: false, user_id: params[:order][:user_id])
@order.update_attribute(:quantity_requested, params[:order][:quantity_requested])
@order.save
redirect_to @order
end
private
def order_params
params.require(:order).permit(:user_id, :item_id, :quantity_requested, :quantity,
:order_completed, :sold, :shipping_address_id)
end
end
如果我正在考虑正确的方式以及如何让订单了解送货地址,有人可以告诉我吗?
如果我遗漏了一些明显的东西,请提前致谢并表示歉意。
答案 0 :(得分:1)
不确定您是否确实需要:user_id
参数。如果用户已登录,您可以通过current_user
获取。如果没有,你永远不会知道他的身份。
当您按照order.create_shipping_address
或ShippingAddress.create order: order
(或以您喜欢的任何其他方式填充shipping_addresses.order_id
字段)时,订单会知道送货地址。然后,您可以使用order.shipping_address
和shipping_address.order
来查找相关对象。
此外,通常管理者(或网站)必须与客户沟通,至少发送一些有关订单状态的电子邮件,因此我不要求用户登录,但如果他没有登录,我会创建结帐时新的一个存储他的联系人(以及其他一些有用的东西:))