Rails 3, принадлежит_, есть?Для 3 моделей, пользователей, экземпляров, книг - PullRequest
2 голосов
/ 08 сентября 2010

У меня есть следующие модели: Пользователи (id, имя, адрес электронной почты, instance_id и т. Д.) Экземпляры (id, имя домена) Книги (id, name, user_id, instance_id)

В Rails 3, Когда создается новая книга, мне нужно заполнить user_id и instance_id на основе current_user.

В настоящее время user_id назначается при создании новой книги, но не instance_id?Что должно произойти в рельсах, чтобы заполнить это поле при создании книги?

Кроме того, не должно ли рельсы выдавать ошибку, учитывая, что я могу создавать книги без заполненного экземпляра instance_id?

thxs

Ответы [ 2 ]

1 голос
/ 08 сентября 2010

Похоже, что вы нормализовали модели User и Book, добавив ссылку на модель Instance. Вы можете избежать избыточной ссылки, если у вас нет конкретной причины.

Я бы переписал ваши модели следующим образом:

class Instance  < ActiveRecord::Base
  has_many :users
  has_many :books, :through => :users, :order => "created_at DESC"
end

class User < ActiveRecord::Base
  belongs_to :instance
  has_many   :books, :order => "created_at DESC"
end


class Book < ActiveRecord::Base
  belongs_to :user
  has_one    :instance, :through => :user
end

Теперь создайте новую книгу для пользователя.

current_user.books.build(...)

Чтобы получить список книг, принадлежащих экземпляру пользователя:

current_user.instance.books

Чтобы получить список книг, созданных пользователем:

current_user.books

Убедитесь, что вы индексировали столбец instance_id в таблице users и столбец user_id в таблице books.

1 голос
/ 08 сентября 2010

Rails будет выдавать ошибку в этом случае, только если (а) у вас нет проверки или (б) у вас есть внешние ключи базы данных, которые не удовлетворяются.т.е. если instance_id должен быть заполнен на основе текущего пользователя, какой атрибут пользователя должен предоставить его?(instance_id? почему?)

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