2010-11-09 2 views
0

У меня есть довольно простой набор моделей, где «Project» имеет один «Владелец». Я бы хотел, чтобы пользователи вводили имя владельца при создании нового проекта. Если владелец не существует, необходимо создать новый. Есть ли хороший способ сделать это? Я думал об использовании attr_accessor и before_validation, однако, похоже, это противоречило бы отношениям. Есть идеи? Благодаря!Разрешить Active Record Model Assign Association с помощью String

ответ

1

Используйте что-то другое, чем имя вашего отношения ... owner_name должно быть хорошо. Затем напишите необходимый метод before_validation.

+2

Hi Fabio. Спасибо за ответ. Я закончил небольшую настройку (нашел это: http://railscasts.com/episodes/57-create-model-through-text-field). Мой единственный вопрос, который остается, заключается в добавлении валидаций в поля 'attr_accessor', но я уверен, что что-то придумаю. –

+0

Приятно, что Railscast может помочь многим людям с аналогичными проблемами. –

1

Я хотел бы использовать что-то вдоль линий этого в контроллере:

def update 
    Project.transaction do 
    @project.owner = Owner.find_or_create_by_name(params[:project].delete(:owner_name)) 
    @project.attributes = params[:project] 
    @project.save! 
    end 
end 
+0

Привет, Джереми. Это довольно близко к тому, что у меня есть в настоящее время. Просто пытаюсь выяснить, существует ли хороший способ «сушить» код (имел тот же код для обновления и создания, а также в нескольких других местах вокруг приложения и чувствовал, что он должен быть в модели). –

+0

В качестве альтернативы вы можете определить это в модели 'def owner_name = (owner_name); owner = Owner.find_or_create_by_name (owner_name); end ", тогда вам нужно будет использовать поле формы с' project [имя_владельца] 'и в любом действии контроллера' update_attributes (params [: project]) 'должно работать шарм. – Jeremy

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