mindpin / TouchIdea

0 stars 1 forks source link

议题详情页面,尽可能针对每个不同的用户,产生不同的选项排序 #32

Closed destinyd closed 9 years ago

destinyd commented 9 years ago

如题,可知排序主要针对两个数据进行:

  1. 用户(User)
  2. 议题选项(VoteItem)

由于mongoid的id非数字,我考虑取用户的创建时间(基本不可能相同,如果真相同也无所谓)

user_ord = user.created_at.to_i

议题选项由于初始题目创建时间相同,所以使用自动生成随机数作为持久默认值

  field :ord, type: Integer, default: -> { rand(1000) }

由于选项一般不会太多(不超过20) 在控制层获取所有选项后,通过sort根据不同用户排序,然后输出即可

user_ord = current_user.created_at.to_i % 43
@vote_items = @vote.vote_items.sort{|x,y| (x.ord % user_ord) <=> (y.ord % user_ord)}

具体使用方法:

    @vote = Vote.find params[:id]
    @vote_items = Vote.vote_items_rand_order_by_user @vote.id, current_user
ben7th commented 9 years ago

已集成到 0.2