Rails3显示条件链接文本

时间:2011-08-28 03:12:13

标签: ruby-on-rails ruby-on-rails-3

在我的项目中,用户可以关注某些主题

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查询,但这不是很有效。 任何更好的做法?

1 个答案:

答案 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 %>

代码未经测试,但我认为这应该大致有效。请务必根据需要更改用户参考和列。