2016-07-02 3 views
0

Angenommen, ich ein Beitrag Modell wie dieses:Finding Beitrag, die gehören nicht in den Rails auf Autor

class Post < ActiveRecord::Base 
    belongs_to :user 
end 

Und die User-Modell sieht wie folgt aus

class User < ActiveRecord::Base 
    has_many :posts, dependent: :destroy 

    # I have used devise gem for User management 
    devise :database_authenticatable, :registerable, 
     :recoverable, :rememberable, :trackable, 
     :validatable, :authentication_keys => [:login] 
end 

Dann können sagen, X und Y Und Z erstellt einen Beitrag mit ihren Konten. Wenn X angemeldet ist ich klar seinen Beitrag in Ansichten von diesem zeigen kann nur tun:

current_user.post 

Aber aus irgendeinem Grunde mag ich auch die Post, die nicht zu X tun gehört oder arbitrary user kann sagen ?? Gibt es einen Weg, wo ich current_user Objekt nehmen und eine Methode oder etwas so übergeben kann?

Ich meine einfach ich einen Beitrag außer als einen bestimmten Benutzer oder zum Beispiel current_user (Benutzer, der angemeldet ist) erhalten möchten Dank

+0

Sind Sie sicher, dass 'Post' _has many_' posts' ist, was haben Sie, oder haben Sie sich vertippt? –

+0

@ArupRakshit Sorry Es wurde vertippt – aftershock

Antwort

0

Aber aus irgendeinem Grund möchte ich auch die Post, die nicht tun gehört zu X oder lässt sagen, beliebiger Benutzer?

können Sie einen Bereich verwenden, wie unten Beiträge für spezifische Benutzer zu holen: es

scope :fetch_by_user, ->(user) { where(user: user } 

Dann rufen Sie von jedem wie aus dem Controller, wo, wie unten:

Post.fetch_by_user(another_user_object) 

aktualisieren

Wenn Sie wollen alle Beiträge zur Liste, die nicht von aktuellen Benutzer sind, einen Bereich wie hinzufügen:

scope :posts_by_not_current_user, ->(user) { where.not(user: user) } 

Nun rufen von der Steuerung.

Post.posts_by_not_current_user(current_user) 

P.S: Der Umfang hat innerhalb des Post Modell hinzugefügt werden.

+0

also in einem anderen_benutzer_object passiere ich current_user? – aftershock

+0

@aftershock Es kann ein beliebiges Benutzerobjekt sein. Das ist jedes Objekt, das eine Instanz von "Benutzer" ist. –

+0

Also wie kann ich das Objekt des Benutzers erhalten, der außer anderem als der aktuelle Benutzer ist? Einfach ich meine, wie greife ich diese Benutzer, die nicht aktuelle Benutzer ist? – aftershock

0

Nun, Sie müssen eine benutzerdefinierte Abfrage schreiben.

Post.where('user_id IN (#{current_user.id}, #{another_user.id})') 
+0

Dort können viele Benutzer wie A, B, C, D ...... Ich möchte den Beitrag von diesen Benutzer, der nicht aktuelle Benutzer ist sagen wir X. Wie greife ich diese anderen Benutzer? Danke – aftershock

+0

@punit SQL-Injektion kann in Ihrer Abfrage passieren. Tippe diese Antwort nicht an. Sie können es auch anders schreiben. –

Verwandte Themen