2017-02-23 1 views
0

In meiner Anwendung habe ich Modelle TeamUserPost.Ruby on Rails - Zuweisen von Ansicht und/oder bearbeiten zu verschiedenen Benutzern (im selben Team)

class User < ActiveRecord::Base 
    has_many :posts 
    belongs_to :team 

class Team < ActiveRecord::Base 
    has_many :users 

class Post < ActiveRecord::Base 
    belongs_to :user 

In meinem _form.html.haml Ich habe diesen Teil:

- User.where(team_id: current_user.team_id).each do |user| 
    %p=user.name 

das alle Benutzer in derselben Mannschaft zeigt.

Wenn ein Benutzer(In der gleichen Mannschaft) ein post schreibt. Ich möchte ihnen in der Lage sein, Benutzer, die Edit und/oder den Beitrag zuweisen können.

Das bedeutet Benutzer und einige zu Ansicht & bearbeiten einige Benutzer nur Ansicht zuweisen können.

Wie kann ich das tun und was ist der beste Weg, um vorwärts zu gehen?

Antwort

1

ich ein anderes Modell schaffen würde, könnte wie folgt aussehen:

class Permission < ActiveRecord::Base 
    belongs_to :post 
    belongs_to :user 

class User < ActiveRecord::Base 
    has_many :posts 
    has_many :permissions 
    belongs_to :team 

class Team < ActiveRecord::Base 
    has_many :users 

class Post < ActiveRecord::Base 
    has_many: permissions 
    belongs_to :user 

Berechtigungsmodell kann Felder wie "ID", "Post-ID", "Benutzer-ID", "Bearbeitbar" und "Sichtbar" (die letzten beiden Felder als boolesch) haben. Beim Senden können Sie so viele Berechtigungsrollen erstellen, wie vom Benutzer für den Beitrag ausgewählt wurden. Sie würden dann nur Personen erlauben, zu bearbeiten, wenn @ user.post.permission == post.user_id & & @ user.permission.editable? beide kommen als wahr zurück (oder so ähnlich, nicht sicher, wie genau der Rest deiner App aufgebaut ist)

+0

Danke @Michael. Und in meinem 'posts # _form.html.haml' füge ich auch eine separate' Form' für 'Berechtigungen' hinzu. Oder kann ich die Zuweisung in derselben' Form' machen, wenn ja wie? – Rubioli

+0

Sie beziehen sich auf verschachtelte Formulare. Überprüfen Sie Abschnitt 9 (verschachtelte Formulare) der Schienenführungen: http: //guides.rubyonrails.org/form_helpers.html # verschachtelte Formulare. Viele gute Referenzen auf Stackoverflow für verschachtelte Formulare. –

1

Sie können eine Instanz Methode erstellen und verwenden es

class User < ActiveRecord::Base 
    has_many :posts 
    belongs_to :team 

    def team_members 
    User.where(team_id: team_id) 

    # If you dont want current_user/self in the result you can use 
    # User.where(team_id: team_id).where.not(id: id) 
    end 
end 

Und jetzt können Sie es verwenden,

- current_user.team_members.each do |user| 

Auch können Sie es in Drop-Down verwenden

= f.collection_select :user_id, current_user.team_members, :id, :name 

Q Wie kann ich View und/oder Edit & View für den Beitrag jedem Benutzer in sa zuweisen ich Team?

A. Sie können prüfen, ob der aktuelle Benutzer an das Team des Autors Beitrag gehört

So etwas wie

- @posts.each do |post| 
    - if post.user.team_members.include?(current_user) 
    = link_to "Edit", edit_post_path(post) 
+0

Danke @Deepak. Das bekommt/zeigt die "User" richtig? Wie kann ich jedem Benutzer im selben Team ** View ** und/oder ** Edit & View ** für den * Post * zuweisen? – Rubioli

+0

Siehe bitte bearbeiten –

Verwandte Themen