Tal*_*boy 1 ruby refactoring ruby-on-rails ruby-on-rails-3 ruby-on-rails-3.1
我很难在没有巨大的if/else结构的情况下以最佳方式概念化如何做到这一点.我知道我可以这样做,但我正在尝试将其抽象为方法而我迷失了.
upvote = 1
no vote = 0
downvote = -1
Run Code Online (Sandbox Code Playgroud)
基本上,一个人可以击中一个upvote或downvote按钮.
如果他们点击upvote并且他们当前的投票是upvote,它'unvotes'该帖子并将其设置为零
如果他们点击downvote并且他们当前的投票是upvote,它会将其切换为downvote
如果他们的投票为零,并且他们点击upvote,则将投票设置为1
对于downvote,反之亦然
这是我到目前为止,但它没有说明你点击upvote后点击upvote ..而不是将其设置为0它将其设置为-1.
我遇到了问题,我很难搞清楚如何写它
def update_vote(upvote_or_downvote)
self.active_vote? ? self.value = 0 : self.alternate_vote
end
def active_vote?
self.value != 0
end
def alternate_vote
self.value *= -1
end
Run Code Online (Sandbox Code Playgroud)
有很多方法可以做到这一点.这是一个.我认为up_or_down将作为upvote的+1传递,而downvote的传递为-1.不要过于复杂化.
def update_vote(up_or_down)
self.value = self.value == up_or_down ? 0 : up_or_down
end
Run Code Online (Sandbox Code Playgroud)
如果您以这种方式考虑逻辑,这很简单:如果用户点击相同的内容,则重置为零.否则将其设置为单击的值.
归档时间: |
|
查看次数: |
82 次 |
最近记录: |