1

Я создал простой webapp с аутентификацией пользователя. Я сделал две модели: Users для аутентификации пользователей и Details для получения дополнительной информации. Они связаны с отношением one-to-one. У меня возникают проблемы с обновлением двух моделей с одного контроллера.Rails: две модели с отношением один к одному, один контроллер

one-to-one В общем случае ассоциация вообще не рекомендуется (я не желаю перетаскивать слишком много полей в одну таблицу), и если да, то каков правильный способ обработки двух моделей через один контроллер?

ответ

3

Проверить Nested Model Form Part 1/2 по рельсам. Осмотрите рельсы, и вы можете наверняка выяснить :) Объясняется это многими отношениями, небольшими твиками, и вы можете сделать это один к одному.

Некоторые примеры кода вы можете увидеть:

class Wiki < ActiveRecord::Base 
    has_many :revisions 

    has_one :latest_revision, :class_name => "Revision", :order => 'updated_at desc', :limit => 1 
    accepts_nested_attributes_for :revisions 
end 

class Revision < ActiveRecord::Base 
    belongs_to :wiki 
end 


# new Wiki page, first revision 
def new 
    @wiki = Wiki.new 
    @revision = @wiki.revisions.build 
end 

def create 
    @wiki=Wiki.new(params[:wiki]) 
    @wiki.save 
end 

# adding a Revision to a Wiki page 
def edit 
    @wiki = Wiki.find(params[:id]) 
    @revision = @wiki.revisions.build # creating a new revision on edit 
end 

def update 
    @wiki=Wiki.new(params[:wiki]) 
    @wiki.save 
end 

def show 
    @wiki = Wiki.find(params[:id]) 
    @revision = @wiki.latest_revision 
end 
+0

Я забыл добавить, что видел обе части RailsCasts, и я не знаю, будет ли это соответствовать моей ситуации здесь. Но спасибо! (Я всегда ищу RailsCasts, прежде чем я спрошу = D) – aL3xa

+0

Хорошо, это он. Решила для меня, спасибо! знак равно – aL3xa

-1

Да Использование 12:59 нам оправданной, как вы сказали, для хранения вещей разобщенным. Что касается доступа к ним из контроллера, вы сможете это сделать, если вы правильно определили ассоциации в моделях.

модель Пользователь должен иметь:

has_one : detail 

и Detail модель должна иметь:

belongs_to : user 

тогда, если у вас есть внешний ключ с именем «user_id» в таблице «подробные сведения», все должен работать нормально.

теперь вы можете получить доступ к обе модели используют друг друга как

User.find(1).detail 

или

Detail.find(1).user 

теперь вы можете обновить как точно так же, как от их контроллеров.

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