產品控制器:軌道 - 的habtm協會不保存到數據庫
def update
params[:product][:category_ids] ||= []
@product = Product.find(params[:id])
if @product.update_attributes(params[:product])
redirect_to @product
else
render "edit"
end
形式:
<% for category in Category.all %>
<%= check_box_tag "product[category_ids][]", category.id, @product.categories.include?(category) %>
<%= category.name %>
<% end %>
當我看看日誌,它看起來像它更新的類別,但是當我去rails控制檯並對產品進行了查找,它告訴我category_id是零,所以當我搜索某個產品類別中的所有產品時,它不會返回任何內容,因爲所有category_id都是零。
我有一個產品和一個category_products的簡單連接表。我嘗試在產品模型中使用accepts_nested_attributes_for,並進行了各自的表單更改,但也沒有任何效果。
有誰知道爲什麼它不保存到數據庫級別?同樣在這樣的情況下,最好是按照我在這裏做的方式做還是做嵌套屬性?謝謝。
UPDATE
從日誌代碼
Parameters: {"utf8"=>"✓", "authenticity_token"=>"xxx", "product"=>{"remote_image_url"=>"", "name"=>"Test", "manufacturer"=>"Unknown", "category_ids"=>["1"], "price"=>"$25.00", "available"=>"true", "commit"=>"Update", "id"=>"1"}
Category Load (0.5ms) SELECT `categories`.* FROM `categories` WHERE `categories`.`id` = 1 LIMIT 1
Category Load (0.2ms) SELECT * FROM `categories` INNER JOIN `categories_products` ON `categories`.id = `categories_products`.category_id WHERE (`categories_products`.product_id = 1)
AREL (0.4ms) DELETE FROM `categories_products` WHERE `categories_products`.`product_id` = 1 AND `categories_products`.`category_id` IN (2)
AREL (0.4ms) UPDATE `products` SET `price` = 0.0, `updated_at` = '2011-10-03 16:48:01' WHERE `products`.`id` = 1
SQL (1.8ms) COMMIT
從產品型號
代碼
attr_accessible :name, :manufacturer, :price, :category_ids, :image, :remote_image_url, :available
has_and_belongs_to_many :categories
從分類模型
代碼
has_and_belongs_to_many :products
您可以在日誌文件中添加顯示正在發佈到服務器的參數的行嗎? – rdvdijk
另外,你可以在你的兩個模型中顯示相關代碼嗎? – rdvdijk
@rdvdijk,請參閱上述更新。 – noob