2016-08-14 36 views
0

我有一個類別,它有許多產品和屬於一個類別的產品。當我刪除一個類別時,我想讓產品的category_id屬性爲空或爲零。爲什麼Rails在向模型添加dependent::nullify後拋出一個錯誤?

我試圖通過添加相關的做到這一點:廢掉我的has_many方法在我的分類模型:

class Category < ActiveRecord::Base 
    validates :name, :presence => true 
    validates :name, :length => { in: 4..16 } 

    has_many :products, dependent: :nullify 
end 

試圖摧毀一個對象時,我現在收到此錯誤:

undefined method `name' for nil:NilClass 

和better_errors引用我的銷燬方法作爲問題,但它工作正常之前,我添加dependent::nullify,這裏是方法:

def destroy 
    @category = Category.find(params[:id]) 

    if @category.destroy 
     flash[:success] = "Category was successfully destroyed" 
     redirect_to categories_path 
    else 
     flash[:error] = "Could not delete Category" 
     redirect_to :back 
    end 
end 

在我添加dependent::nullify選項之前,它刪除的記錄正常。

這裏是我的類別和產品架構:

create_table "categories", force: true do |t| 
    t.string "name",  null: false 
    t.text  "description" 
    t.datetime "created_at" 
    t.datetime "updated_at" 
    end 

create_table "products", force: true do |t| 
    t.string "name",        null: false 
    t.string "sku",         null: false 
    t.text  "description" 
    t.decimal "price",  precision: 8, scale: 2, null: false 
    t.integer "category_id" 
    t.datetime "created_at" 
    t.datetime "updated_at" 
    end 

    add_index "products", ["name"], name: "index_products_on_name", using: :btree 
    add_index "products", ["sku"], name: "index_products_on_sku", unique: true, using: :tree 

產品不會被空禁止CATEGORY_ID,所以我不認爲這是問題。

這裏是我的產品型號:

class Product < ActiveRecord::Base 
    belongs_to :category 
end 

在我的類別/ show.html.erb我使用的名稱的方法是這樣的:

<div class="row"> 
    <div class="col-xs-12"> 
    <h1><%= @category.name %></h1> 
    </div> 
</div> 

在我的類別/ index.html.erb我也使用名稱方法一次:

<div class="col-xs-8 col-xs-offset-1"> 
    <% @categories.each do |category| %> 
     <h2><%= category.name %></h2> 
     <p><%= category.description %></p> 
     <p><%= link_to "Show", category_path(category.id) %>, <%= link_to "Edit", edit_category_path(category.id) %>, <%= link_to "Delete", category_path(category.id), method: "delete", data: { confirm: "Are you sure?"} %></p> 

    <% end %> 
</div> 

在這兩種觀點,我不應該使用無類別的權利?我不認爲這是錯誤引用的內容,因爲我在控制檯中得到相同的錯誤以及視圖不起作用。

我不確定這個問題會是什麼..謝謝你的幫助。

回答

0

我只是在我的Gemfile更新軌到4.2.6版本解決了這一問題。它以前是4.1版本。

0

當您使用廢止:

它將設置CATEGORY_ID爲null,在那裏你叫product.category.name處也有可能會出現這種類型的錯誤,Undefined method name for nil:Class。這是因爲沒有產品和產品類別。類別返回nil。所以,你需要相應地修改你的代碼。

希望它可以幫助

+0

我很確定我沒有在任何地方調用product.category.name,並且當我試圖銷燬我的控制檯中的一個對象時我得到相同的錯誤,所以我很確定它沒有任何事情要做與我調用product.category.name任何地方在我的顯示代碼。 – srlrs20020

+0

將您的視圖添加到您已使用name屬性的位置。 –

+0

我添加了我稱之爲類別名稱的視圖 – srlrs20020

相關問題