Похоже, вы описываете vote_controller
, который может голосовать в любом направлении, а не разбивать вверх и вниз на свои собственные контроллеры.
Вопрос о том, чтобы разделить голосование вверх и вниз на собственный контроллер, насколько они отличаются. Если бы у вас были контроллеры vote_up
и vote_down
, они должны были бы найти голоса голоса, на которые проголосовали, добавить новое голосование, а затем сохранить данные. Почти все было бы одинаково независимо от того, голосуете вы или нет. На самом деле, как я бы управлять голосов будет иметь vote
типа немного, как это:
class Vote
attr_reader :direction, :user, :timestamp
end
Таким образом, один тип голос может записать, является ли она вверх или вниз голосование, а также записи, которые сделали (так что, если кто-то троллинг, вы можете отменить всю свою работу в пути) и время голосования, которое всегда полезно.
Тогда при звонке vote_controller.up_vote
вы создаёте новый объект Vote
с положительным направлением, для vote_controller.down_vote
создайте его с отрицательным выражением. Все остальное совершенно общие, поэтому все, что бы в контроллер голосования будет туманно, как это:
def vote(direction)
myVote = vote.new(direction, Request.userId, Time.now)
voteOnObject.votes.add(myVote)
end
def up_vote
vote(1)
end
def down_vote
vote(-1)
end
Вы заметите, что это не что иное, как рабочий код. Это отчасти потому, что я не хочу делать домашнее задание для вас, отчасти потому, что в последнее время я не делал много Ruby, поэтому я немного скрипучий. Главное здесь принцип.
Если вы хотите быть должным образом DRY, вы также разработали бы это таким образом, чтобы те же элементы управления голосованием могли быть прикреплены к вопросам, ответам, комментариям и т. Д. (Поэтому у них есть родительский объект данного типа/реализуя данный микс, чьи голоса они корректируют, а не влияют на объект голосования на уровне модели), не внося никаких изменений.
Я уверен, что мир и их собака реализуют клон SO, на данный момент, если вы хотите взять ту же основу и произвести что-то более интересное, что вы и ваши друзья можете запустить сайт, вы можете пойти для классического сайта Q & A (http://en.wikipedia.org/wiki/Q&A_website) в пресс-релизе Forum 2000/Conversatron. Это было довольно забавно, и никто, кажется, больше этого не делает ... – glenatron
Спасибо за ваше предложение. В то время клон SO выглядел неплохо. Но это строго для конкретного класса, который я беру. К сожалению, я потратил много времени, чтобы изменить его сейчас. – DiegoM