2011-01-27 2 views
2

Я хотел бы создать объект, который проверяет наличие родительского объекта И проверяет достоверность родительского объекта. Однако я хотел бы создать его независимо от родительского объекта, и я не уверен, как это сделать.Каков правильный способ создания объекта, который имеет как belongs_to, так и validates_presence_of проверки?

Это мой код:

class User 
    has_many :questions 
end 

class Question 
    belongs_to :user 
    validates_presence_of :user 
    validates_associated :user 
end 

Я знаю, что могу это сделать:

u = User.create 
q = u.questions.create 

, но мне нужно сделать это

u = User.create 
q = Question.create(:user_id => u.id) 

q.valid? 
=> false 

q.errors? 
=> <OrderedHash {:user=>["can't be blank"]}> 

Что такое правильный путь справиться с этим?

Должен ли я использовать

class User 
... 
    before(:save) do 
    self.user = User.find(self.user_id) 
    end 

end 

Это кажется излишне грязным - есть лучший путь?

+1

Peter, Мне любопытно, если объект User создан и сохранен до того, как будет указан новый объект Question. Кроме того, зачем создавать vs new? Является ли это требованием применения или просто сокращением? – Nuby

+0

Nuby, я просто использую «create» как сокращенное. Я думаю, что он создан и сохранен перед ссылкой. –

ответ

3

В модели вопросов вы должны использовать validates_the_presence_of :user_id, а не validates_presence_of :user.

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

+0

Вместо этого я собираюсь создать специальный валидатор, чтобы я мог подтвердить наличие user_id и действительность пользователя. Мне все еще кажется, что я что-то пропустил, но это было полезно для –

0

Вы хотите создать объект через форму? Если вы потом, я бы предложил использовать метод build и accepts_nested_attributes - это позволит вам одновременно создать как родительский объект, так и дочерний объект. Желая это сделать, я обычно ссылаюсь на Ryan's post.

+0

Это не для создания формы к сожалению, и это на самом деле более сложный вопрос (объект с двумя родительскими зависимостями). Причина, по которой я спрашиваю об этом, заключается в том, что это самое простое подмножество основной проблемы, с которой я столкнулся. –

 Смежные вопросы

  • Нет связанных вопросов^_^