Ruby on rails 3 如何在Rails 3中的表单验证错误上重新构建嵌套属性字段

Ruby on rails 3 如何在Rails 3中的表单验证错误上重新构建嵌套属性字段,ruby-on-rails-3,validation,nested-attributes,http-status-code-406,Ruby On Rails 3,Validation,Nested Attributes,Http Status Code 406,我有一个简单的推荐表格。建议有很多优点 因此,在我的控制器中,我做了一个简单的: 6.times {@recommendation.assets.build} 我的问题发生在我尝试保存建议时,并且存在验证错误。我的创建操作: def create @recommendation = Recommendation.new(params[:recommendation]) @recommendation.user_id = current_user.id respond_

我有一个简单的推荐表格。建议有很多优点

因此,在我的控制器中,我做了一个简单的:

 6.times {@recommendation.assets.build}
我的问题发生在我尝试保存建议时,并且存在验证错误。我的创建操作:

def create
    @recommendation = Recommendation.new(params[:recommendation])
    @recommendation.user_id = current_user.id
    respond_to do |format|
      if @recommendation.save
        format.html { redirect_to thankyou_path, notice: 'Recommendation was successfully created.' }
      else
        6.times {@recommendation.assets.build} if @recommendation.assets.blank?
        render action: "new"

      end
    end
  end
运行此页面并提交(带有验证错误)会导致以下日志输出和http 406错误

Started POST "/categories/1/awards/9/recommendations" for 127.0.0.1 at 2013-01-07 11:50:13 -0800
  Processing by RecommendationsController#create as HTML
  Parameters: {"utf8"=>"✓", "authenticity_token"=>"8PVfFZGa72+3KU/km2weZhNy0rxRfp0Qd+CkHdBoQM8=", "recommendation"=>{"nominee"=>"", "title"=>"", "department"=>"", "award_id"=>"9", "summary"=>"", "accomplishments"=>"", "caption"=>"", "url"=>"", "supervisor"=>"You ARE NOT the nominee’s direct manager / supervisor", "approvals_attributes"=>{"0"=>{"email"=>""}}}, "commit"=>"Save/Submit", "category_id"=>"1", "award_id"=>"9"}
  User Load (0.3ms)  SELECT "users".* FROM "users" WHERE "users"."id" = 2 LIMIT 1
   (0.2ms)  BEGIN
   (0.1ms)  ROLLBACK
Rendered shared/_recommend_timeline.html.erb (1.2ms)
  Award Load (20.1ms)  SELECT "awards".* FROM "awards" WHERE "awards"."id" = 9 LIMIT 1
Rendered recommendations/_form.html.erb (66.7ms)
Rendered recommendations/new.html.erb within layouts/application (69.8ms)
   (0.5ms)  SELECT COUNT(*) FROM "recommendations" WHERE "recommendations"."user_id" = 2
   (0.6ms)  SELECT COUNT(*) FROM "approvals" WHERE "approvals"."email" = 'tj@ravennainteractive.com' AND "approvals"."approved" IS NULL
Completed 406 Not Acceptable in 556ms (Views: 188.6ms | ActiveRecord: 31.5ms)

我已经看了很多类似的问题,但我不确定是否有足够的信息可以自信地回答,但我认为您不想精确地重建6次。根据您的模型设置,验证可能会取消一个关联,但不是所有关联

也许你应该试试:

(6-@recommendation.assets.count).times {@recommendation.assets.build}
我的猜测是,您的视图预期正好有6个资产,但在抛出无效资产后,只找到1-5之间的某个位置,这导致了一个内部错误

如果这还不能解决问题,我认为您可能需要提供更多关于在资产上运行哪些验证以及您的视图的信息