2016-07-29 17 views
-1

ここにいくつかの援助があります。commentsにacts_as_followerを実装するにはどうすればよいですか?

私のコメントのためにacts_as_follower gemを実装したいと思います。コメントは投稿に属し、投稿には多くのコメントがあります。

私は...ユーザーが

をコメント追従可能に作られており、これらはプレフィックス動詞、URIパターンと下のすくいルートからコントローラー#アクションです:

post_comment_follows POST

/ポスト/: post_idの/コメント/:comment_idは/次の(:。フォーマットは)#をfollows_comments /posts/:cjob_id/comments/:comment_id/follows/:id(.:formatをDELETE

post_comment_followを作成する)#をfollows_comments

を破壊

私の質問は、これに関する多くの他の記事を見てきました:file:/// C:/ Users/c/Desktop/RubyOnRails/ruby​​%20on%20rails%20-%20acts_as_follower%20for%20multiple%20models %20-%20Stack%20Overflow.html、投稿IDを必要とするコメント表示ページで実装する以外はすべて必要な手順を実行しましたが、さまざまな方法で表示しましたが、post(:id)コメント(:id)がありません。 _comment.html.erbを使用して投稿インデックスにこれを実装するにはどうすればよいですか?

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

ああ、それはプログラマーの冗談です... – Dlaw

+0

あなたはいくつかの括弧が欠落している必要があります。 –

+0

ありがとうございます。私はそれを修正しました。 – Dlaw

答えて

0

次戻り["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 

0

まず、それは次にあなたが何をする必要があるか見コード

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

をインデントする方が良いでしょうあなたは「ABC」または「ABD」を求めて質問しますか?」しかし、私はあなたが探しているものと "C"か "D"が恣意的であるかどうかはわかりません。あなたはこのコードでirbで遊んで、あなたのユースケースを修正することができます。

+0

ありがとうございましたが、私は前にこのようなことを試みました...私が必要とするのは、 "A B C"のように3つをプリントアウトすることです。 – Dlaw

0

あなたが "B C" または "A B D" を返すようにしたい場合は、使用を行うことができますハッシュ#のような何かを掘る:

[].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 

出力:

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

そして、あなたの好みとして変更することができます。

+0

定義されていないメソッド 'dig' for ......... MethodError ...それは私が得ているものです。どうしてか分かりません。 – Dlaw

+0

定義されていないメソッド 'dig' for ......... MethodError ...それが私が得ているものです。どうしてか分かりません。 – Dlaw

+0

@Dlawは、Ruby 2.3版のみで動作します – nathanjo

関連する問題