【发布时间】:2015-08-04 04:14:22
【问题描述】:
我有两个型号Product 和ProductBoxing,产品有很多product_boxings。
product.rb
class Product < ActiveRecord::Base
has_many :product_boxings
accepts_nested_attributes_for :product_boxings
validates :name, presence: { presence: true, message: 'please give a name' }, on: :update
end
product_boxing.rb
class ProductBoxing < ActiveRecord::Base
belongs_to :product
validates :quantity, presence: { presence: true, message: 'please fill in quantity' }, on: :update
end
_form.html.erb
<%= form_for(@product, html: {class: "form-horizontal", role: "form", multipart: true}) do |f| %>
<%= f.text_field :name%>
<%= f.fields_for :product_boxings do |g| %>
<%= g.text_field :quantity %>
<% end %>
<% end %>
由于某些原因,我先创建 product 和 product_boxing 而没有验证。之后,我想在更新时验证两者。验证适用于Product,但不适用于ProductBoxing。
我的代码有问题吗?还是轨道问题?
顺便说一句,我删除了验证选项 on: :update 并在创建时验证两者,验证对两者都有效。
更新
首先,用户会运行以下代码
def new
product = Product.new
p_b= product.product_boxings.build()
product.save!
redirect_to edit_product_path(product)
end
然后
def edit
end
并发布表格
def update
@product.update(product_params)
unless @product.errors.any?
redirect_to products_url
else
render 'edit'
end
end
其他信息
def product_params
params.require(:product).permit(:name, product_boxings_attributes:[:id, :quantity] )
end
【问题讨论】:
-
您可以发布生成的参数日志吗?您能确认
product_boxing正在正常更新吗? -
你可以在问题中发布strong_params方法吗?
-
请在问题中..
-
我发现了一个新情况,如果数量已经填写,数量的验证工作。
标签: ruby-on-rails ruby validation ruby-on-rails-4