2011-12-17 8 views
0

こんにちは、私は私のモデルで、次のコードを持っている:私はすべての製品を一覧表示し、製品のビューにいるときRailsでエラー通知を表示する方法は?

class Product < ActiveRecord::Base 
    before_destroy :check_tasks 
    has_many :tasks, :order => 'created_at DESC' 
    validates :name, :presence => true 
    belongs_to :sprint 
    validates :sprint_id, :presence => true 
    def check_tasks 
     if self.tasks.any? 
      errors.add_to_base "Product has tasks and cannot be destroyed." 
    return false 
end 
end 
end 

が、私は、ビューの上にエラーメッセージを表示したいと思い、毎回誰かタスクがリンクされている製品を削除しようとします。私はメッセージを求めます:製品はタスクを持っており、破棄することはできません。

以下のコードはどのようなコードですか?ビューは製品ビューで、views/productsフォルダーにあります。

ありがとうございました!

<h1>Listing products</h1> 
<%= link_to 'New Product', new_product_path %> 
<table> 
    <tr> 

    <th>Name</th> 
    <th>Description</th> 
    <th>Sprint</th>  
    <th></th> 
    <th></th> 
    <th></th> 
    </tr> 
<% if not @messages_rendered -%> 
    <% if flash[:error] -%> 
    <p class='error'><%=h flash[:error] %></p> 
    <% end -%> 
    <% if flash[:notice] -%> 
    <p class='notice'><%=h flash[:notice] %></p> 
    <% end -%> 
<% end -%> 
<% @messages_rendered = true -%> 

<% @products.each do |product| %> 
    <tr> 
    <td><%= product.name %></td> 
    <td><%= product.description %></td> 
    <td><%= product.sprint.name %></td> 
    <td><%= link_to 'Show', product %></td> 
    <td><%= link_to 'Edit', edit_product_path(product) %></td> 
    <td><%= link_to 'Destroy', product, :confirm => 'Are you sure?', :method => :delete %></td> 
    </tr> 
<% end %> 
</table> 

<br /> 

答えて

3

あなたproduct_controllerでこれを入れてみてください:それは働いた

def destroy 
    ... 
    flash[:error] = @product.errors.full_messages.join(' ') 
    ... 
end 
+0

!ありがとう!唯一のことは、私はbaseProductにタスクがあり、削除できないということです。私はテキストの背後にある "ベース"をどのように削除できるか知っていますか? – Runy

+0

@Runy私は、あなたはルビー1.8を使用していると思いますか?私はコードを更新して、これを試してみてください。 –

+0

はい私はルビーバージョン1.8.7とレール3.0.5を手に入れました。私は更新したコードを試しましたが、うまくいきませんでした。奇妙なのは、 "ベース"が表示され続けることです。私はほとんどそこにいる。私はそれを知っている。 – Runy

関連する問題