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

Ruby on rails 通过关联限制代码的一部分,ruby-on-rails,ruby,model,associations,Ruby On Rails,Ruby,Model,Associations,我已经构建了一个ruby on rails应用程序,允许用户跟踪他们的训练。用户有很多训练。此外,如果用户是健身房所有者,则可以创建一个盒子(健身房)。其目的是过滤用户的活动,以便他们只能看到与其健身房相关的信息。然后,用户可以通过成员资格模型指定他们是否是该框的成员。成员资格表分别在Membership.box\u id和user.id列中收集@box.id和current\u user.id 用户通过/views/box/show.html.erb视图中的以下表单进行关联: <% re

我已经构建了一个ruby on rails应用程序,允许用户跟踪他们的训练。用户有很多训练。此外,如果用户是健身房所有者,则可以创建一个盒子(健身房)。其目的是过滤用户的活动,以便他们只能看到与其健身房相关的信息。然后,用户可以通过成员资格模型指定他们是否是该框的成员。成员资格表分别在Membership.box\u id和user.id列中收集@box.id和current\u user.id

用户通过/views/box/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.id%>
当前用户id%>
'' %>
然后,我在框显示页面中显示该框的所有成员

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


我试图将表单限制为仅限于尚未成为该框成员的用户,但我不确定如何编写
语句

以下是其余的关联:

使用者

class用户:破坏
结束
锻炼

class Workout < ActiveRecord::Base
  belongs_to :user
  belongs_to :box
end
课堂训练
盒子

classbox:会员资格
有很多:锻炼,:通过=>:用户
你有很多会员资格吗
结束
会员资格

class Membership < ActiveRecord::Base
  belongs_to :user
  belongs_to :box
end
类成员资格
#会员模式
命名的_作用域:对于_-box,lambda{| box{:条件=>{:box_-id=>box.id}
#用户模型
你有很多会员资格吗
def成员_的_框?(框)
!会员资格。对于_框(框)。空白?
结束
#看法
#出示表格

免责声明:代码未经测试。它可能需要一些小改动。

我想有些人会从所有代码中受益,但有时读起来太多了:)我遇到了一个错误
undefined方法
for_-box'for#`我已经将
named_-scope
definition更改为rails 2.3.x。希望这能奏效。如果您使用的是rails 3,那么范围定义将有所不同。更多细节请参见。我想我们很接近了。我得到了一个语法错误:
/Users/bgadoci/WODstack/app/models/membership.rb:8:语法错误,意外的tASSOC,期望“}…”,lambda{box}:conditions=>(:box_id=>box.id)}/Users/bgadoci/WODstack/app/models/membership.rb:8:语法错误,意外的tASSOC,期望“…ox}:conditions=>(:box_id=>box.id)}^
再次抱歉,我的错。我已经更新了代码。命名的_作用域条件应该在
{`}
下,而不是
(``)
我接受了您最近的更新,并添加了另一组
{}
,它起作用了:
命名的_作用域:对于_-box,lambda{box}{box}{:conditions>{:box\u id=>box.id}}
太棒了。谢谢你的帮助。
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
# 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 %>