Вопрос о редактировании несколькими моделями и одним контроллером - PullRequest
1 голос
/ 02 сентября 2011

У меня есть три Модели (word, Adjectiv, Adverb) и один Контроллер (Words), которые управляют этими Моделями. У меня есть только одна форма, в которую пользователь может добавить наречие, Adjectiv или слово. Моя функция редактирования:

def edit
        @word=Word.find(params[:id])
        @adjektiv=Adjektiv.find(params[:id])
        @adverb =Adverb.find(params[:id])
  end 

например, когда я хочу отредактировать одну запись наречие (id = 1), в Textboxes появляются другие записи adjectiv и Word с id = 1. Я хотел бы, чтобы меня смотрели только первую запись наречие Как я могу это сделать? Спасибо

Ответы [ 2 ]

3 голосов
/ 02 сентября 2011

Это похоже на идеальную ситуацию для использования STI (Single Table Inheritance), так как прилагательные и наречия - это тоже слова. Для этого вам понадобится строковое поле с именем type в вашей таблице слов. Тогда вы можете сделать это так:

def Word < ActiveRecord::Base
end

def Adjektiv < Word
end

def Adverb < Word
end

А потом в вашем контроллере:

def edit
  @word=Word.find(params[:id])   
end 
1 голос
/ 02 сентября 2011

Если у вас есть только одна пользовательская форма, но несколько моделей, это означает, что вы связываете несколько моделей с одним контроллером. Следовательно, рекомендуется использовать подход nested-model-form .

Пожалуйста, следуйте этому превосходному рейскасту Райана Бейтса в форме гнезда.

Ссылка для части 1 Railscast, вы можете найти последующие Railscast на том же сайте.

Такой подход сделает ваш код чище, эффективнее и проще в обслуживании.

Спасибо.

...