如何为资源创建“星形”系统并根据关联编写条件

时间:2011-02-28 05:18:21

标签: ruby-on-rails ruby

我创建了一个Ruby on Rails应用程序(2.3.9),用户可以在其中记录锻炼。我正在尝试实现一个“明星”系统,该系统允许一个logged_in用户为他们想要记住的其他用户进行锻炼。

我这样做是通过创建Star资源(下面的关联)。我在Star表中成功创建了删除记录,现在希望根据current_user是否已经为锻炼加星标有条件地显示视图代码。

我通过_workouts.html.erb的部分显示所有锻炼。对于每次锻炼,我想显示<% remote_form_for [workout, Star.new]...You have already starred this workout

Workout :has_many => :stars

User :has_many => :stars

Star :belongs_to => :workouts
Star :belongs_to => :users

我想我必须在Star.rb中创建一个named_scope,它会查看是否有一个现有的星形记录,其中workout_id与workout.id匹配,而current_user.id匹配该锻炼的star.user_id匹配。只是键入这个让我困惑。请帮忙。

1 个答案:

答案 0 :(得分:0)

您可以创建has_many ..., :through => ...关系,然后使用#include?检查关联。

# User
has_many :starred_workouts, :class_name => 'Workout', :through => :stars

# View
<% if current_user.starred_workouts.include? workout %>
    ...