2016-07-29 18 views
-1

Einige Unterstützung hier Gurus:Wie implementiere ich acts_as_follower in Kommentaren?

Ich möchte Acts_as_follower Edelstein für meinen Kommentar implementieren. Der Kommentar gehört zu Post und Post hat viele Kommentare.

Ich habe den Kommentar verfolgbare von Nutzern gemacht ..

Und das ist der Präfix Verb, URI-Muster und # Controller-Aktion von Rake Routen unter:

post_comment_follows POST

/post /: post_id/Kommentar /: comment_id/folgt. (: Format) follows_comments #

post_comment_follow DELETE /posts/:cjob_id/comments/:comment_id/follows/:id(.:format erstellen) follows_comments # zerstören

Meine Frage ist durch viele andere Artikel zu diesem Thema gegangen zB: file: /// C:/Benutzer/c/Desktop/RubyOnRails/Ruby% 20 auf% 20rails% 20-% 20acts_as_follower% 20for% 20multiple% 20models % 20-% 20Stack% 20Overflow.html, Ich habe alle notwendigen Schritte gemacht, außer für die Implementierung auf der Kommentar-Seite, die Post-ID erfordert, ich habe versucht, die verschiedenen Methoden zeigen, aber es sagt entweder post (: ID) fehlt oder Kommentar (: ID) fehlt. Wie kann ich dies auf dem Post-Index mit _comment.html.erb umsetzen?

+0

Oh das war ein Programmierer Witz lol ... – Dlaw

+0

Übrigens müssen Sie einige Klammern fehlen. –

+0

Vielen Dank für die Beobachtung. Ich habe es korrigiert. – Dlaw

Antwort

0

Der folgende Code gibt ["A", "B", "C", "D"]:

#for trying out in `irb` this is fine, but I would recommend refactoring to smaller methods 
[].tap do |result| 
    result << arry[0].keys 
    second_level_hash_names = arry.map {|hash| hash.values.map {|values_hash| values_hash["name"]}}.flatten 
    third_level_hash_names = arry.map {|hash| hash.values.map {|values_hash| values_hash["sub"].map {|sub_hash| sub_hash["name"]}}}.flatten 
    result << second_level_hash_names << third_level_hash_names 
end.flatten 

In Ihrem Frage, die Sie nach "ABC" oder "ABD" fragen? " aber ich bin mir nicht sicher, wonach du suchst und ob "C" oder "D" willkürlich ist. Sie können mit diesem Code in irb spielen und für Ihren Anwendungsfall ändern.

0

Erstens ist es in der Regel besser den Code

arry =[ 
    {"A"=>{ 
    "name"=>"B", 
    "id"=>1, 
    "sub"=>[ 
     { 
     "name"=>"C", 
     "id"=>1 
     },{ 
     "name"=>"D", 
     "id"=>2 
     } 
    } 
    ] 

Dann sehen einrücken, was Sie tun müssen:

arry[0]['A']['sub'][0]['name'] # => 'C' 
arry[0]['A']['sub'][1]['name'] # => 'D' 
+0

Danke, aber ich habe so etwas schon mal ausprobiert ... Was ich brauche, ist die drei ausgedruckten .... wie "A B C". – Dlaw

0

Wenn Sie "A B C" oder "A B D" zurückkehren wollen, können wie Verwendung Hash # graben etwas tun:

[].tap do |result| 
    result << arry[0].keys 
    result << arry[0].flatten.dig(1, "name") 
    result << arry[0].flatten.dig(1, "sub", 1, "name") 
end.flatten 

Ausgang:

["A", "B", "D"] 

und kann als Belieben ändern.

+0

undefined method 'dig' für ......... MethodError ... Das ist was ich bekomme. Ich weiß nicht warum. – Dlaw

+0

undefined Methode 'Dig' für ......... MethodError ... Das ist, was ich bekomme. Ich weiß nicht warum. – Dlaw

+0

@Dlaw, funktioniert nur von Ruby für Version 2.3 – nathanjo