Отношение ActiveRecord has_many предотвращает создание новых объектов - PullRequest
0 голосов
/ 17 октября 2010

Предположим, у меня есть модель Comment, принадлежащая_ модели Post.

Я хочу сделать так, чтобы создание нового экземпляра Comment (будь то new, create, find_or_create_by_x и т. Д.) Завершилось неудачей (предпочтительновызвать исключение), если сообщение не установлено немедленно (либо передавая его в качестве параметра, либо всегда ссылаясь на сообщение при создании комментария, например, post.comments.new или post.comments.create).

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

Каков наилучший способ сделать это?Спасибо.

Ответы [ 2 ]

0 голосов
/ 18 октября 2010

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

class Comment < ActiveRecord::Base
  validates_presence_of :post_id
end

Затем создайте новые комментарии, используя:

@post = Post.find(params[:post_id])

@post.comments.create(params[:comment])
0 голосов
/ 17 октября 2010

Я думаю, что для того, чтобы это работало с new, вы должны сделать это в after_initialize:

def after_initialize
  raise "no Post" unless post
end

Похоже на излишество, так как это должно выполняться каждый раз, когда создается экземпляр комментария. Я бы сказал, написать тесты, которые гарантируют, что значения по умолчанию установлены правильно.

...