通过关联限制代码的一部分

时间:2010-12-02 04:44:03

标签: ruby-on-rails ruby model associations

我在rails应用程序上构建了一个ruby,可以让用户跟踪他们的锻炼情况。用户has_many锻炼。此外,如果用户是健身房所有者,则可以创建一个盒子(健身房)。目的是过滤用户的活动,使他们只能看到与健身房相关的信息。然后,用户可以通过成员资格模型指定他们是否是该框的成员。 Membership表分别在membership.box_id和user.id列中收集@ box.id和current_user.id。

用户通过/views/boxes/show.html.erb视图中的以下表单进行关联:

<% remote_form_for Membership.new do |f| %> 
  <%= f.hidden_field :box_id, :value => @box.id %>
  <%= f.hidden_field :user_id, :value => current_user.id %>
  <%= submit_tag "I am a member of this box" , :class => '' %>
<% end %>

然后,我在框显示页面中显示该框的成员的所有用户。

<% @box.users.each do |user| %>
  <%= link_to (user.username), user %><br/>
<% end %>

我正在尝试将表单限制为仅仅不是该框成员的用户,但我不确定如何编写<% unless ... %>语句。

以下是其他协会:

用户

class User < ActiveRecord::Base
  has_many :boxes
  has_many :workouts, :dependent => :destroy
end

锻炼

class Workout < ActiveRecord::Base
  belongs_to :user
  belongs_to :box
end

class Box < ActiveRecord::Base
  belongs_to :user
  has_many :users, :through => :memberships
  has_many :workouts, :through => :users
  has_many :memberships
end

成员

class Membership < ActiveRecord::Base
  belongs_to :user
  belongs_to :box
end

1 个答案:

答案 0 :(得分:0)

# Membership model
named_scope :for_box, lambda {|box| {:conditions => {:box_id => box.id}}}

# User model
has_many :memberships

def member_of_box?(box)
  !memberships.for_box(box).blank?
end

# View
<% unless current_user.member_of_box?(box) %>
   # Show the form
<% end %>

免责声明:未对代码进行测试。它可能需要进行微小的改动。