update_all через ассоциацию - PullRequest
       0

update_all через ассоциацию

2 голосов
/ 30 сентября 2010

Я пытаюсь использовать update_all через ассоциацию, и я получаю ошибки mysql, кто-нибудь знает почему, пожалуйста?

class Basket < ActiveRecord::Base
  has_many :basket_items
  has_many :articles, :through => :basket_items

  def activate_articles
    articles.update_all :active => true
  end
end

class BasketItem < ActiveRecord::Base
  belongs_to :basket
  belongs_to :item
  belongs_to :article
end


Mysql::Error: Unknown column 'basket_items.basket_id' in 'where clause': UPDATE `articles` SET `active` = 1 WHERE ((`basket_items`.basket_id = 114)) 

Ответы [ 2 ]

2 голосов
/ 02 июня 2011

dev.rubyonrails перенес свои билеты на трекер Github.Вот перемещенная ссылка: https://github.com/rails/rails/issues/522

@ nolman разместил эту справку в билете

@ daicoden и я в @square соединялись по этому вопросу, и мы смогли что-то добавитьвместе по линиям:

class Comment
  class << self
    def trash_all
      sql = "UPDATE #{quoted_table_name} "
      add_joins!(sql, {})
      sql << "SET #{sanitize_sql_for_assignment({:trashed => true})} "
      add_conditions!(sql, {})
      connection.execute(sql)
    end
  end
end

Теперь вы можете вызывать todolist.comments (: условие => {: trashed => false}). trash_all Это приводит к следующему SQL:

UPDATE `comments` INNER JOIN `todos` ON `todos`.id = `comments`.todo_id SET `trashed` = 1 WHERE (`comments`.`trashed` = 0 AND `todos`.`todolist_id` = 968316918) 

Надеюсь, это поможет!

2 голосов
/ 01 октября 2010

http://dev.rubyonrails.org/ticket/5353

Похоже, что была проблема с n-n ассоциациями, использующими has_many: through и используя update all. Кажется, ничего не было сделано.

1-n ассоциации действительно работают.

ошибка

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...