2012-11-21 69 views
1

我有...如何顯示與simple_form錯誤與嵌套模型

/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) 

/應用/ 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

感謝,

史蒂芬。

回答

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