Rails如何在创建时关联2个模型?

时间:2017-05-16 19:54:43

标签: ruby-on-rails

我想在创建Dispute时将Order对象与Dispute Object关联,但是当我在日志中创建对象时:

  

ActiveRecord :: RecordNotFound(无法找到没有ID的订单)

我不应该尝试在方法中找到订单吗?

有人知道如何关联创作中的对象吗?

争议控制人是:

class DisputesController < ApplicationController

  def new

    if current_user.address.blank?
      redirect_to edit_user_path

      flash[:error] = 'fill the address'
    else
      @dispute = Dispute.new

    end
  end 



def create
 @order = Order.find(params[:id])
  if   current_user == @order.buyer
    dispute = @order.dispute.nil? ? Dispute.new : @order.dispute
    dispute.attributes = params[:dispute]
    dispute.user = @order.buyer
    dispute.buyer_name = @order.buyer_name
    dispute.seller_name = @order.seller_name

    if dispute.save
      flash[:success] = 'Dispute Created'
    end

end

订单型号

class Order < ActiveRecord::Base

has_one :dispute

end

争议模型

class Dispute < ActiveRecord::Base

belongs_to :order

end

2 个答案:

答案 0 :(得分:0)

我首先想到的是你得到的错误是检查表单提交时你有哪些参数,因为它似乎没有根据你传入查找调用的参数找到一个订单。

同时查看强安全措施的安全性:http://edgeapi.rubyonrails.org/classes/ActionController/StrongParameters.html

答案 1 :(得分:0)

如果不添加参数或嵌套路线,请求将无法知道正在引用的订单。您可以使用嵌套路线,例如orders /:order_id / dispute(http://guides.rubyonrails.org/routing.html#nested-resources),然后您可以使用@ order.build_dispute(http://guides.rubyonrails.org/association_basics.html#methods-added-by-belongs-to