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