Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 将发货地址模型与订单模型关联Rails 4_Ruby On Rails_Ruby On Rails 4_Model Associations - Fatal编程技术网

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`