Как я могу напрямую обновить модель соединения в ассоциации has_many_through? - PullRequest
0 голосов
/ 16 января 2020

У меня есть приложение Rails с двумя моделями, к которым присоединяется третья:

class Food < ApplicationRecord
    has_many :shopping_list_items
    has_many :users, through: :shopping_list_items
end


class ShoppingListItem < ApplicationRecord
    belongs_to :user
    belongs_to :food
end

class User < ApplicationRecord
  has_many :shopping_list_items
  has_many :foods, through: :shopping_list_items
end

Средняя модель, ShoppingListItem, имеет несколько дополнительных атрибутов, включая priority, которые я хотел бы обновите напрямую.

Так, например, я хотел бы сделать что-то вроде:

r = current_user.shopping_list_items.where(food_id: 1).first
r.priority = "urgent"
r.save

Объект выглядит нормально, пока я не пытаюсь его сохранить, , когда я получаю SQL ошибка:

ActiveRecord::StatementInvalid (PG::SyntaxError: ERROR:  zero-length delimited identifier at or near """"
LINE 1: ...$1, "updated_at" = $2 WHERE "shopping_list_items"."" IS NULL
                                                             ^
: UPDATE "shopping_list_items" SET "priority" = $1, "updated_at" = $2 WHERE "shopping_list_items"."" IS NULL):

Я полагаю, это жалуется на отсутствие первичного ключа? Не уверен, как это исправить, так как в документации по rails говорится, что у соединяемых таблиц не должно быть столбца первичного ключа ...

Я создал среднюю таблицу с миграцией, подобной этой:

   create_table :shopping_list_items, id: false do |t|
      t.belongs_to :user
      t.belongs_to :food

      t.string :priority
      t.integer :position

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