Использование before_create в rails3 - PullRequest
0 голосов
/ 12 февраля 2011

Я сейчас создаю систему тегов, где Post has_many: tags,: through =>: tag_joins

Прямо сейчас, когда создается новый тег, автоматически создается объединение, связывающее тег и сообщениетег был создан на.Проблема в том, что я пытаюсь использовать before_create, чтобы проверить, был ли создан тег с таким же именем и идентификатором пользователя.Если он уже создан, я бы хотел, чтобы объединение использовало оригинальный идентификатор тега, а не позволяло ему создавать новый идентификатор тега.

Какие-либо советы о том, как мне этого добиться?

Ответы [ 3 ]

2 голосов
/ 12 февраля 2011

Почему бы вам не использовать find_or_create_by_user_id_and_tag_id() или find_or_initialize_by_.

Обновление

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

@post.tags.find_or_create_by_name('tag_name')

или если вы хотите применить некоторые изменения перед сохранением нового объекта, тогда используйте

@post.tags.find_or_initialize_by_name('tag_name')

В обоих случаях атрибут имени будет установлен на «tag_name»по умолчанию.

Таким образом, этот метод вернет вам тег, если он существует, в противном случае создаст его, чтобы вы могли использовать его при настройке модели соединения.

Обновление 2

Это на самом деле не будет работать с has_many: через, вы можете увидеть похожую проблему и обходной путь: Ошибка прииспользование `find_or_create_by` в` has_many` `through`

1 голос
/ 12 февраля 2011

Не можете ли вы запустить приватный метод в вашей модели, используя :before_save?

Если вы введете код вроде:

:before_save :method_to_check_something

... вы сможете выполнить любой способ проверки в модели, не подключая контроллер (и, следовательно, придерживаясь тощего контроллера, методология толстой модели).

0 голосов
/ 12 апреля 2011

Это должно позаботиться о дублировании записей между публикацией и тегом, но не должно быть уверенным, как настроены ваши ассоциации с пользователем.

class Post < ActiveRecord::Base
  has_many :tags, :through => :tag_joins, :uniq => true
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...