无法更新Rails 4.2.6中的嵌套属性

问题描述:

我将我的Rails从3.2迁移到Rails 4.2.6。我有2个表,其中报告:has_many =>图标。我为report和icon_attributes添加了强大的参数。创建功能工作正常,并且在更新功能时,我能够更新报告但无法更新图标,而是每次点击更新操作时都会创建新图标。 这是我的代码:无法更新Rails 4.2.6中的嵌套属性

report.rb:

class Report < ActiveRecord::Base 
    has_many :icons, -> { order 'position_id ASC'} 
    accepts_nested_attributes_for :icons, :reject_if => lambda { |a| a[:icon].blank? }, :allow_destroy => true 
end 

icon.rb:

class Icon < ActiveRecord::Base 
    belongs_to :report 
end 

reports_controller:

def update 
    respond_to do |format| 
     if @report.update_attributes(report_params) 
     @report.save 
     format.html { redirect_to(user_reports_url, :notice => 'Report was successfully updated.') } 
     format.json { render :json => { :success => true, :report_id => @report.id, :report_title => @report.title, :icon_array => @report.icons, :redirect => report_url(@report.id) } } 
     format.xml { head :ok } 
     else 
     format.html { render :action => "edit" } 
     format.xml { render :xml => @report.errors, :status => :unprocessable_entity } 
     end 
    end 
    end 

    private 

    def report_params 
    params.require(:report).permit(:title, :comments, :remarks,{:icons_attributes => [:id, :icon, :rotation, :top, :_destroy]}) 
    end 

我已经把看跌期权看到日志在控制器中,图标插入为@ report.update_attributes(report_params)步骤,这是对数:

处理由ReportsController#更新为JSON参数: { “UTF8”=> “✓”, “报告”=> {“标题“=>”title1“,”评论“=>”这是一条评论“, ”icons_attributes“=> {”0“=> {”id“=>”“,”icon“=>”market_indicator“, “rotate”=>“0”,“top”=>“”,“_destroy”=>“false”},“id”=>“87”}

报告加载(0.3ms) 。* FROM“reports”WHERE “reports”。“deleted_at”IS NULL AND“reports”。“id”=? LIMIT 1 [[“id”, 87]]
SQL(1.6ms)INSERT INTO“icons”(“icon”,“rotation”,“top”) VALUES(?,?,?)[[“icon “,”market“],[”rotation“,”0“],[”top“,”“], [”left“,”“]](12.0ms)commit transaction
ActiveRecord :: Associations :: CollectionProxy

我已经把日志为:

def update 
    puts @report.icons.inspect 
    respond_to do |format| 
    ..... 
    end 

它导致的:

图标加载(0.9ms)选择“图标”。*从“图标”其中“图标”。“”report_id“=? ORDER BY position_id ASC [ “REPORT_ID”,91]

<ActiveRecord::Associations::CollectionProxy [#<Icon id: 204, report_id: 91, icon: "asking_price", rotation: "", top: "150", left: "165">]>

+0

你可以发布传递给你的更新操作的参数吗? – mmichael

+0

正如我在问题中发布的,我使用report_params作为更新操作的参数。 – venkat

+0

我的意思是从日志中发布参数。它们应该看起来像'参数:{“report”=> {“title”=>“blah”,“icons_attributes”=> {etc.}}}' – mmichael

"icon_attributes"不是沿着通过图标的ID。

"icons_attributes"=>{"0"=>{"id"=>"", "icon"=>"market_indicator", "rotation"=>"0", "top"=>"", "_destroy"=>"false"}, "id"=>"87"} 

你会注意到id是空的。由于id是空白的,导轨认为它是一个新的记录,因此创建一个新的图标。错误在于你如何制作表格。

+0

更新之前我正在打印图标,id已经列出。我更新了问题,请检查。 – venkat

+0

是的,但更新操作没有您的日志中显示的ID。 – ChrisBarthol