Ruby on rails 试图保存到Rails中的父表和子表,但在嵌套属性上获取参数错误

Ruby on rails 试图保存到Rails中的父表和子表,但在嵌套属性上获取参数错误,ruby-on-rails,nested-attributes,Ruby On Rails,Nested Attributes,嗨,我正在尝试从一个表单同时保存到两个表。 我创建了联系人,与所属的订单有很多关系 型号/contact.rb class Contact < ActiveRecord::Base has_many :orders accepts_nested_attributes_for :orders, reject_if: :all_blank end 名称不存在于Orders表中,这就是为什么我认为它在抱怨,但它确实存在于Contacts表中。我应该以不同的方式来创造这个吗 我还尝试了

嗨,我正在尝试从一个表单同时保存到两个表。 我创建了
联系人
,与
所属的
订单
有很多关系

型号/contact.rb

class Contact < ActiveRecord::Base
  has_many :orders
  accepts_nested_attributes_for :orders,  reject_if: :all_blank
end
名称不存在于Orders表中,这就是为什么我认为它在抱怨,但它确实存在于Contacts表中。我应该以不同的方式来创造这个吗

我还尝试了
@order=@contact.orders.create(order\u params)
,但出现了相同的错误

这是一个视图示例

  <%= form_for @contact, url: orders_path do |f| %>

        <div>
            <%= f.label :name %>
            <%= f.text_field :name, class:"form-control" %>
        </div>
        <div> 
.....
  <%= f.fields_for :order do |order| %>
       <div> 
            <%= order.label :package %>
            <%= order.text_field :package, class: "form-control" %>
        </div>

.....
1)第一点是create方法有
@ordar.save
而不是
@order.save
,我假设它是打字错误

2) 第二点是
@order=@contact.orders.build(order\u params)
这一行不需要
order\u params
,应该是
@order=@contact.orders.build

因此,通过这些更改,您的创建操作应该是

def create
    @contact = Contact.new(order_params)
    if @contact.save

        flash[:success] = "Your has been sent we'll get back to you shortly"
        redirect_to new_order_path
    else
        flash[:danger] = "We were unable to process your request please try again or email admin@careerfalir.co.za"
        redirect_to new_order_path
    end
end

您使用的是
@ordar.save
而不是
@order.save
,这是一个打字错误吗?这一行
@order=@contact.orders.build(order\u params)
应该是
@order=@contact.orders.build
在构建我的道歉时,确实是一个打字错误。这样就消除了错误并保存到了表中,但它并没有接受我对Orders表的任何参数OK sry,不需要再次构建
订单
,检查更新的答案。@Jacques,现在检查我的答案吗?我已经尝试了
@contact=contact.new(order\u参数)如果@contact.save
,则仅将其保存到联系人表中。我还尝试了其他一些给我提供不允许参数的方法:order,我发现在我的视图中,我使用
f.fields\u for:order
来显示表单,而我的关联是
有很多:orders
接受嵌套的属性\u for:orders
。如果我将其更改为
f.fields\u:orders
it
@contact.save
工作。其他方法也是如此。谢谢你的帮助@斯特拉瓦诺提到,很高兴看到你解决了你的问题。祝您今天过得愉快。
    @contact = Contact.new(order_params)
    if @contact.save
        *** @order = @contact.orders.build(order_params) *** This is the line with the error
        @ordar.save
        flash[:success] = "Your has been sent we'll get back to you shortly"
        redirect_to new_order_path
  <%= form_for @contact, url: orders_path do |f| %>

        <div>
            <%= f.label :name %>
            <%= f.text_field :name, class:"form-control" %>
        </div>
        <div> 
.....
  <%= f.fields_for :order do |order| %>
       <div> 
            <%= order.label :package %>
            <%= order.text_field :package, class: "form-control" %>
        </div>
def create
    @contact = Contact.new(order_params)
    if @contact.save

        flash[:success] = "Your has been sent we'll get back to you shortly"
        redirect_to new_order_path
    else
        flash[:danger] = "We were unable to process your request please try again or email admin@careerfalir.co.za"
        redirect_to new_order_path
    end
end