我有一個類別,它有許多產品和屬於一個類別的產品。當我刪除一個類別時,我想讓產品的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>
在這兩種觀點,我不應該使用無類別的權利?我不認爲這是錯誤引用的內容,因爲我在控制檯中得到相同的錯誤以及視圖不起作用。
我不確定這個問題會是什麼..謝謝你的幫助。
我很確定我沒有在任何地方調用product.category.name,並且當我試圖銷燬我的控制檯中的一個對象時我得到相同的錯誤,所以我很確定它沒有任何事情要做與我調用product.category.name任何地方在我的顯示代碼。 – srlrs20020
將您的視圖添加到您已使用name屬性的位置。 –
我添加了我稱之爲類別名稱的視圖 – srlrs20020