2012-12-16 54 views
0

我的报告模型has_many区域。如何在嵌套模型的控制器中使用respond_with

在我尝试将它切换为使用新的respond_with风格之前,areas_controller.rb工作正常。

切换后,创建和索引操作仍然正常,但编辑操作并不实际更新区域,尽管发送了“区域已成功更新”的Flash消息。为什么?

areas_controller.rb

class AreasController < ApplicationController 

    respond_to :html 
    filter_resource_access 
    layout "wide" 

    def index 
    @report = Report.find(params[:report_id]) 
    @areas = @report.areas 
    respond_with(@report, @areas) 
    end 

    def show 
    @report = Report.find(params[:report_id]) 
    @area = @report.areas.find(params[:id]) 
    respond_with(@report, @area) 
    end 

    def new 
    @report = Report.find(params[:report_id]) 
    @area = @report.areas.build 
    respond_with(@report, @area) 
    end 

    def create 
    @report = Report.find(params[:report_id]) 
    @area = @report.areas.build(params[:area]) 
    flash[:notice] = "Area was successfully created." if @area.save 
    respond_with(@report, @area) 
    end 

    def edit 
    @report = Report.find(params[:report_id]) 
    @area = @report.areas.find(params[:id]) 
    respond_with(@report, @area) 
    #also tried leaving that respond_with out 
    end 

    def update 
    @report = Report.find(params[:report_id]) 
    @area = @report.areas.find(params[:id]) 
    flash[:notice] = "Area was successfully updated." if @area.save 
    respond_with(@report, @area, :location => report_area_path(@report, @area)) 
    # also tried respond_with(@report, @area) 
    end 

    def destroy 
    @report = Report.find(params[:report_id]) 
    @area = @report.areas.find(params[:id]) 
    @area.destroy 
    respond_with(@report, @area) 
    end 

end 

回答

1

您需要更新模型上的属性:

def update 
    @report = Report.find(params[:report_id]) 
    @area = @report.areas.find(params[:id]) 
    flash[:notice] = "Area was successfully updated." if @area.update_attributes(params[:area]) 
    respond_with(@report, @area, :location => report_area_path(@report, @area)) 
end 
相关问题