大家好,本人 Rails 新手,在实现用户投票的时候遇到个问题: 我需要在 links#index 下显示当前登录用户对于每个 link 的投票情况,请问有什么好的解决办法呢?
create_table "links", force: true do |t|
t.string "description"
t.string "url"
t.datetime "created_at"
t.datetime "updated_at"
t.integer "user_id"
end
create_table "users", force: true do |t|
t.string "name"
t.string "email"
t.string "user_name"
t.string "password_digest"
t.datetime "created_at"
t.datetime "updated_at"
end
create_table "votes", force: true do |t|
t.integer "user_id"
t.integer "link_id"
t.integer "vote"
t.datetime "created_at"
t.datetime "updated_at"
end
我现在想到的办法是在 links_controller 的 index action 下加入 load_user_votes 这个方法:
#link.rb
class Story < ActiveRecord::Base
attr_accessor :vote
end
#links_controller.rb
def index
@links = Link.all
load_user_votes(@links)
end
private
def load_user_votes(links)
if current_user
if votes = Vote.where(user_id: current_user.id, link_id: links.map(&:id))
votes.each do |v|
links.each do |l|
if l.id == v.link_id
l.vote = v.vote
end
end
end
end
end
end
然后再在 view 里做根据 link.vote 判断,决定 html class name。 请问大家有好的办法吗?先谢谢了。