我想在创建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
答案 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)