2012-02-03 11 views
1

多くのユーザーを持つ部門というモデルがあります。 departmentに関連付けられたユーザーが存在するかどうかを確認するbefore_destroyメソッドを作成しました。その場合は削除しないでください。Rails 3 - インデックスページの破壊エラーを表示します。

class Department < ActiveRecord::Base 
    before_destroy :without_users 
    has_many :users, :dependent => :destroy 

    def without_users 
     if self.users.size() > 0 
     self.errors.add :base, "The department cannot be deleted because it has users associated to it" 
     end 
     self.errors.blank? 
    end 
end 

私のインデックスビューには、部門を破壊するボタンがあります。

<%= link_to image_tag("remove.png", :border => 0, :title => 'Delete'), department, confirm: 'Are you sure that you want to delete?', method: :delete, :class=>"actions_table" %> 

そして、私のコントローラでは、これは自分の行動を破壊である:

def destroy 
    @department = Department.find(params[:id]) 
    @department.destroy 

    respond_to do |format| 
     format.html { redirect_to departments_url } 
     format.json { head :ok } 
    end 
end 

インデックスビューでエラーメッセージを表示するRailsの方法は何ですか?

ありがとうございます!

答えて

0

通常、エラーメッセージを渡して、flash変数を使用してビューに表示します。 See the documentation for it here。これは、リダイレクトしていたシナリオで役に立ちます。代わりに、コマンドを使用して、この要求から実際に@departmentオブジェクトを取得してerrors属性にアクセスできるページをレンダリングすることもできます。

ユーザーのすべてのエラーメッセージを表示しようとしている場合は、破壊操作を行い、これを行うことをお勧めします。

def destory 
    @department = Department.find(params[:id]) 
    @department.destroy 

    unless @department.errors 
    respond_to do |format| 
     format.html { redirect_to departments_url } 
     format.json { head :ok } 
    end 
    else 
    # here is where you handle the scenario where there are errors. 
    render 'error_page' 
    end 
end 
+0

@ department.errorsのすべてのエラーを連結してフラッシュ変数で表示するにはどうすればよいですか? – Tony

+1

Michael HartlのRoRチュートリアルでは、オブジェクトにエラーが発生したときに複数のエラーメッセージを表示するのに役立つ部分的な方法を説明しています。 [このセクションを確認して、助けてください](http://ruby.railstutorial.org/chapters/sign-up#sec:signup_error_messages)。 – Batkins

+0

これはBatkinsのポストへの更新です。 URLは今http://ruby.railstutorial.org/chapters/sign-up#sec-signup_error_messagesです。 – user1470511

関連する問題