2010-12-02 4 views
1

J'ai créé une application ruby ​​on rails qui permet aux utilisateurs de suivre leurs entraînements. L'utilisateur a_many séances d'entraînement. En outre, un utilisateur peut créer une boîte (gymnase) s'il est propriétaire d'une salle de sport. Le but est de filtrer l'activité des utilisateurs de sorte qu'ils ne puissent voir que les informations relatives à leur salle de sport. Les utilisateurs peuvent ensuite spécifier s'ils sont membres de cette boîte via un modèle d'appartenance. La table Membership rassemble @ box.id et current_user.id dans les colonnes membership.box_id et user.id respectivement.Restriction d'une portion de code via une association

Les associés d'utilisateur via le formulaire ci-dessous dans la vue /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 %> 

j'afficher puis, dans la page show case tous les utilisateurs qui sont membres de cette boîte .

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

J'essaie de limiter la forme aux seuls utilisateurs qui ne sont pas déjà membres de cette boîte, mais je ne sais pas comment écrire la déclaration <% unless ... %>.

Voici le reste des associations:

utilisateur

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

entraînement

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

Box

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

membres

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

Je suppose que certaines personnes vont bénéficier de tout le code, mais c'est juste trop de lire parfois :) – s84

Répondre

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 %> 

Avertissement: Le code n'a pas été testé. Il pourrait besoin de modifications mineures.

+0

Je reçois une erreur. 'méthode non définie' for_box 'pour # ' – bgadoci

+0

J'ai changé la définition' named_scope' en rails 2.3.x like. J'espère que cela fonctionne. Si vous utilisez les rails 3, la définition de l'étendue sera différente. Voir http://api.rubyonrails.org/classes/ActiveRecord/NamedScope/ClassMethods.html pour plus de détails. – Chirantan

+0

Je pense que nous sommes proches. J'obtiens une erreur de syntaxe: '/Users/bgadoci/WODstack/app/models/membership.rb:8: erreur de syntaxe, inattendu tASSOC, attendez '}' ..., lambda {| box | : conditions => (: box_id => box.id)} ^ /Users/bgadoci/WODstack/app/models/membership.rb:8: erreur de syntaxe, inattendu tASSOC, attendu ')' ... ox | : conditions => (: box_id => box.id)} ^ ' – bgadoci

Questions connexes