在我的项目中,用户可以关注某些主题
class User < ActiveRecord::Base
has_many :topic_followings
has_many :topics, :through => :topic_followings, :include => [:questions]
然后我有一个页面,我正在显示所有主题。 示例:健康[关注],科学[关注]
[关注]是指向控制器的链接,该控制器将根据用户是否关注该主题来关注或取消关注该主题。
当我显示所有主题时,我希望根据用户是否关注该主题来更改链接[关注]的文本。
以下是链接的代码
<%= link_to 'Follow',new_topic_following_path(:topic_id => topic.id) %>
有没有办法做到这一点? 我能想到的唯一方法是为每个主题使用1个SQL查询,但这不是很有效。 任何更好的做法?
答案 0 :(得分:2)
您可以查询用户所关注的所有主题ID的数组。因此,在您的视图或辅助方法中,您只需检查数组是否包含topic.id。
# add this either into your controller, or separate the query into the model file as a separate method
f_topics = TopicFollowing.where(:user_id => current_user.id).select(:topic_id)
@followed_topics = f_topics.collect { |t| t = t.topic_id }
<% @topics.each do |topic| %>
<% if @followed_topics.include?(topic.id) %>
# unfollow link here
<% else %>
follow link here
<% end %>
<% end %>
代码未经测试,但我认为这应该大致有效。请务必根据需要更改用户参考和列。