简体   繁体   English

如何在带有嵌套模型的控制器中使用response_with

[英]How to use respond_with in a controller with nested models

My Report model has_many areas. 我的报告模型有很多区域。

The areas_controller.rb was working fine before I tried switching it to use the new respond_with style. 在我尝试将其切换为使用新的response_with样式之前,areas_controller.rb运行良好。

After switching, the create and index actions still work fine, but the edit action does not actually update the area, despite sending the flash message "Area was successfully updated." 切换后,创建和索引操作仍然可以正常工作,但是尽管发送了闪烁消息“区域已成功更新”,但编辑操作实际上并未更新区域。 Why? 为什么?

areas_controller.rb : 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

You need to update the attributes on the model: 您需要更新模型上的属性:

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM