2010-10-27 6 views
1

Я делаю простую систему BBS с рубином на рейках3.Rails 3 ассоциации моделей

3 основных режимаl являются членами/категориями/статьями.

Статья принадлежит тем членам/категориям, (member_id/category_id columns in db table) и каждому члену/категории 'has_many'.

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

def new 
    @article = current_member.articles.new 
end 

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

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

Например,

LOCALHOST: 3000/Статьи/КНС/новый

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

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

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

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

ответ

1

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

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

+0

Да, я тоже об этом подумал, но что, если пользователь использует ex) firefox, измените скрытую переменную readonly на что-то еще? – user482594

+1

Если он по-прежнему является допустимым идентификатором категории, тогда я не вижу проблемы. Если только некоторые участники не могут отправлять сообщения в определенные категории. Независимо от того, кто будет беспокоиться об изменении этой скрытой формы, очевидно, затрачивает немало усилий без всякой причины. Вы можете проверить ваш контроллер, чтобы убедиться, что идентификатор категории для категории в URL-адресе совпадает с идентификатором, переданным в этом скрытом входе, и не сохраняйте статью, если это не так. Хотя я достаточно зеленый в RoR, чтобы не знать, как это сделать. – sholsinger

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