Я новичок в rails и пытаюсь создать общий код и повторно использовать его на нескольких контроллерах.В основном я использую драгоценный камень thumbs_up, который позволяет некоторым моделям выступать в качестве избирателей, а другие модели - избирателям (например, модель пользователя).
Представьте себе следующий сценарий:
У меня естьмодели «Вопрос-ответ».Вопрос имеет много ответов.И вопрос и ответ имеют право голоса.
Routes.rb:
resources :questions do
resources :answers do
member do
get 'vote_up'
get 'vote_down'
end
end
member do
get 'vote_up'
get 'vote_down'
end
end
Я реализовал решение, в котором у каждой из моих моделей с возможностью голосования есть свои собственные контроллеры, где обрабатываются действия Vote_up и voice_down.Однако в обоих контроллерах эти действия в основном одинаковы, единственное различие заключается в том, что класс модели используется для поиска экземпляра, за который нужно голосовать.Пример:
QuestionsContoller:
def vote_up
@voteable = Question.find(params[:id])
current_user.vote_exclusively_for(@voteable)
respond_to do |format|
format.js { render :action => 'votes/vote_completed' }
end
end
AnswersContoller:
def vote_up
@voteable = Answer.find(params[:id])
current_user.vote_exclusively_for(@voteable)
respond_to do |format|
format.js { render :action => 'votes/vote_completed' }
end
end
Я хотел бы создать миксин с этим кодом для включения в оба контроллера, может кто-нибудь пролитьнекоторый свет о том, как это реализовать?Должен ли миксин определять методы голосования и голосования?Или вместо этого, должен ли mixin реализовать какой-то вспомогательный метод, который затем вызывается в методах Vote_up и Vote_down каждого контроллера?
Это лучший подход для этой проблемы или должен быть только один контроллер для обработки voice_upи акции voice_down?
Буду очень признателен за вашу помощь по этим вопросам.Большое спасибо заранее
Бруно