Rails 3.1 Как использовать родительский атрибут при сохранении ребенка? - PullRequest
2 голосов
/ 07 декабря 2011

Работа над проектом Rails 3.1 с использованием Devise.

Модель «Мой пользователь» has_many: курсы и курс, принадлежащий_пользователю:

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

# check if user preference is miles, if so convert entered value to kilometers. All 
# distances are stored as kilometers and converted to miles if necessary

before_save :convert_distance 

def convert_distance
    if course.user.miles
       course.distance = course.distance * 1.6
    end
end

Очевидно, я не могу использовать course.user.miles, потому что новый курс еще не установил user_id.

Так как я могу проверить значение атрибута user.miles? Это то, что мне нужно сделать в контроллере?

Ответы [ 2 ]

0 голосов
/ 07 декабря 2011

В этом случае вы можете использовать обратный вызов after_commit.

0 голосов
/ 07 декабря 2011

На самом деле, это зависит от того, как вы создаете Course для User. Например, это работает в CoursesController, который также знает, кто пользователь:

course = user.courses.build(params[:course])
if course.save
  # ...
end

Использование #build в ассоциации назначает соответствующий родительский идентификатор, поэтому user будет виден из course.

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