1

私は持っています...

/config/routes.rb:

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

/app/models/heuristic.rb:

class Heuristic < ActiveRecord::Base
  attr_accessible :area_id, :blueprint_url
  belongs_to :area
  validates :blueprint_url, :presence => {:message => "Please type the blueprint's internet address"}
end

/app/models/area.rb:

class Area < ActiveRecord::Base
  has_many :heuristics
end

/app/controllers/heuristics_controller.rb:

class HeuristicsController < ApplicationController
  def edit
    @area = Area.find(params[:area_id])
    @heuristic = Heuristic.find(params[:id])
  end
 def update
  @heuristic = Heuristic.find(params[:id])
  @area = Area.find(params[:area_id])
  respond_to do |format|
    if @heuristic.update_attributes(params[:heuristic])
      format.html { redirect_to areas_path, notice: 'Heuristic was successfully updated.' }
      format.json { head :no_content }
    else
      format.html { redirect_to edit_area_heuristic_path(@area, @heuristic) }
      format.json { render json: @heuristic.errors, status: :unprocessable_entity }
    end
  end
 end
end

/app/views/heuristics/new.html.haml:

%h1 New heuristic
= render 'form'
= link_to 'Back', area_heuristics_path(@area)

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

= simple_form_for [@area, @heuristic] do |f|
  = f.error_notification
  = f.input :blueprint_url
  = f.button :submit

予想どおり、アプリでは空の:blueprint_urlを使用して更新を保存できません。

ただし、エラー通知は表示されません。これは、simple_formが@areaまたは@heuristicなどのエラーを表示するかどうかを認識していないためだと思います。

エラーを表示するにはどうすればよいですか?

rdocには、error_notificationsにオプションを渡すことができると書かれていますが、このような状況で渡すオプションについては書かれていません。

http://rubydoc.info/github/plataformatec/simple_form/master/SimpleForm/FormBuilder:error_notification

ありがとう、

スティーブン。

4

1 に答える 1

1

エラーを表示する方法は、リダイレクトではなく、更新が失敗したときにテンプレートをレンダリングすることです。リダイレクトすると、そのエラー状態がすべて失われます。

def update
  @heuristic = Heuristic.find(params[:id])
  @area = Area.find(params[:area_id])
  respond_to do |format|
    if @heuristic.update_attributes(params[:heuristic])
      format.html { redirect_to areas_path, notice: 'Heuristic was successfully updated.' }
      format.json { head :no_content }
    else
      format.html { render "edit" } # This is the thing that will get your error state
      format.json { render json: @heuristic.errors, status: :unprocessable_entity }
    end
  end
end
于 2012-11-21T01:56:49.480 に答える