Rails 3 модельные ассоциации - PullRequest
1 голос
/ 27 октября 2010

Я делаю простую систему BBS с ruby ​​на rails3.

3 основных модели: члены / категории / статьи.

Статья принадлежит элементам / категориям (столбцы member_id / category_id в таблице базы данных) и каждый член / категория 'has_many' статей.

Когда конкретный пользователь пытается написать статью, я пробовал это

def new
  @article = current_member.articles.new
end

и автоматически заполняет раздел member_id, когда статья создается без ввода формы или чего-либо еще.

Что мне делать, если я хочу автоматически заполнить столбец category_id статьи? Я считаю, что все работы, связанные с данными, должны выполняться в рамках модели. Тем не менее, я передаю: значение категории через URL

Например,

localhost: 3000 / article / qna / new

будет означать, что статья должна иметь category_id = 2 (при условии, что у категории с id = 2 есть name = qna, также я выполнил задания по маршрутизации, которые я могу успешно получить 'qna' из params [: category]).

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

 def create
   current_member.articles.build(:category => get_category_id_from_name(params[:category]))
 end 

? Но нормально ли это? потому что я считаю, что поскольку модели не могут получить доступ к переменной params, контроллер должен выполнять вышеуказанную работу, и это не «путь рельсов» Я не хочу использовать вложенную форму, потому что я не хочу, чтобы пользователь выбирал категорию, когда он пишет. Это похоже на то, что если есть плата QnA и пользователь нажимает кнопку «запись», это означает, что пользователь пишет на плате QnA.

1 Ответ

1 голос
/ 28 октября 2010

Самый простой способ сделать это - добавить два скрытых поля в форму, которая создает экземпляр Article, и назначить значения, которые вы хотите для "category_id" и "member_id", для этих скрытых полей.

Rails автоматически вытянет их в хэш параметров, и они автоматически окажутся в вашем вызове Article.new.

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