Ruby on rails 将发货地址模型与订单模型关联Rails 4
我试图在我的应用程序中将发货地址与订单关联,但找不到一个好方法 这是我的协会:Ruby on rails 将发货地址模型与订单模型关联Rails 4,ruby-on-rails,ruby-on-rails-4,model-associations,Ruby On Rails,Ruby On Rails 4,Model Associations,我试图在我的应用程序中将发货地址与订单关联,但找不到一个好方法 这是我的协会: class ShippingAddress < ActiveRecord::Base belongs_to :order end class ShippingAddress
class ShippingAddress < ActiveRecord::Base
belongs_to :order
end
class ShippingAddress
及
类顺序
我看到很多例子都假设有一个当前的用户,但我正在尝试进行签出过程,这样用户就不必登录
以下是我的配送地址控制器的外观:
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
class ShippingAddressesController
这是订单控制器的外观:
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
class OrdersController
有人能告诉我,如果我想这是正确的方式,以及我如何使订单知道发货地址吗
提前谢谢,如果我遗漏了一些明显的东西,我很抱歉 不确定您是否真的需要参数中的
:user\u id
。如果用户已登录,则可以通过当前用户
获取。如果不是,你无论如何也不会知道他的身份
订单在创建时会知道发货地址,如订单。创建发货地址
或发货地址。创建订单:订单
(或以任何其他方式填充发货地址。订单id
字段)。然后可以使用order.shipping\u address
和shipping\u address.order
查找相关对象
此外,通常经理(或网站)无论如何都必须与客户沟通,至少发送一些关于订单状态的电子邮件,所以我不要求用户登录,但如果他没有登录,我会在结帐时创建一个新的,以存储他的联系人(以及一些其他有用的信息:)嗨,感谢您的评论和反馈。我试着提出了你的建议,但我还是遗漏了一些东西。我不太清楚您要我在哪里下单。创建装运地址。这应该放在订单控制器还是地址控制器中?我尝试了几种方法,并根据我的工作方式得到不同的错误消息。@Kelly,我忽略了一个事实,即您在创建发货地址时已经传递了
:order\u id
。至少它在发货地址参数中
。所以如果它真的被发送了,然后你可以跳过我写的第一部分,直接转到订单。发货地址和发货地址。订单是:)订单。发货地址应该返回与订单相关的发货地址和发货地址。订单返回与发货相关的订单地址。回到我建议的第一部分,它的意思是像order=order.find:order.id@shipping\u address=order.create\u shipping\u address shipping\u address\u address\u params
中的shipping\u address\u controller\create
而不是“@shipping\u address=ShippingAddress.new(shipping\u address\u params)@shipping\u address.save`