rails - ассоциация habtm не сохраняется в базе данных - PullRequest
1 голос
/ 03 октября 2011

Контроллер продукта:

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

1 Ответ

0 голосов
/ 03 октября 2011

Я думаю, что вы не можете выполнить то, что вы пытаетесь сделать с "habtm". Посмотрите на ответ на этот вопрос об изменении habtm на has_many :through связь и использовании модели таблицы соединений в вашей форме для обновления ассоциации.

...