1

產品控制器:軌道 - 的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 
+0

您可以在日誌文件中添加顯示正在發佈到服務器的參數的行嗎? – rdvdijk

+0

另外,你可以在你的兩個模型中顯示相關代碼嗎? – rdvdijk

+0

@rdvdijk,請參閱上述更新。 – noob

回答

0

我認爲你不能完成的任務你正在試圖做一個「habtm」。查看the answer to this question,瞭解如何將habtm更改爲has_many :through關聯,並使用表單中的連接表模型更新關聯。

+0

由於通過關聯將其更改爲has_many:類別ID存儲在產品分類模型中,但我的搜索功能仍然沒有看到。我使用meta_search gem,我的代碼如下所示:<%= collection_select:products_categories_category_id_equals_any,Category.all,:id,:name,:include_blank => true,:prompt =>「選擇一個類別」%> – noob

+0

你原來的問題已經修復了,對吧? StackOverflow的問題應該是合理的範圍。我建議你就這個問題開始一個新的問題。 (另請參閱常見問題(http://stackoverflow.com/faq#dontask)。)隨時接受此答案作爲解決您的原始問題。 – rdvdijk