0

レポート モデルに属するエリア モデルがあります。SimpleForm を使用して部分的なフォームを作成しました。new_report_area_path(@report) に移動すると、正常に機能する新しいエリア フォームが表示されます。詳細を入力して送信すると、エリアが作成され、area#show に移動します。しかし、新しいエリア フォームのボタンには、「エリアの作成」ではなく「エリアの更新」と表示されます。なんで?

config/routes.rb:

Testivate::Application.routes.draw do
  resources :reports do
    resources :areas
  end
end

デシベル/schema.rb:

ActiveRecord::Schema.define(:version => 20121205045544) do
  create_table "areas", :force => true do |t|
    t.string   "name"
    t.datetime "created_at", :null => false
    t.datetime "updated_at", :null => false
    t.integer  "report_id"
  end
  create_table "reports", :force => true do |t|
    t.string   "name"
    t.datetime "created_at", :null => false
    t.datetime "updated_at", :null => false
  end
end

アプリ/モデル/area.rb:

class Area < ActiveRecord::Base
  attr_accessible :name
  has_many :heuristics
  belongs_to :report
end

アプリ/モデル/レポート.rb:

class Report < ActiveRecord::Base
  attr_accessible :name
  has_many :heuristics
  has_many :areas
end

app/controllers/areas_controller.rb:

class AreasController < ApplicationController  
  filter_resource_access
  def new
    @report = Report.find(params[:report_id])
    @area = @report.areas.create
    respond_to do |format|
      format.html # new.html.erb
    end
  end
  def create
    @report = Report.find(params[:report_id])
    @area = @report.areas.create(params[:area])
    respond_to do |format|
      if @area.save
        format.html { redirect_to report_area_path(@report, @area), notice: 'Area was successfully created.' }
      else
        format.html { render action: "new" }
      end
    end
  end
end

app/views/areas/news.html.haml:

%h1 New Area
= render 'form'

app/views/areas/_form.html.haml:

= simple_form_for [@report, @area] do |f|
  = f.error_notification
  = f.input :name
  = f.button :submit
4

1 に答える 1

1

エリアを作成する代わりに、新しいアクションとして構築する必要があります。

def new
  @report = Report.find(params[:report_id])
  @area = @report.areas.build # build instead of create
  respond_to do |format|
    format.html # new.html.erb
  end
end
于 2012-12-05T07:08:26.957 に答える