我在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
答案 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 %>
免责声明:未对代码进行测试。它可能需要进行微小的改动。