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