私はすべてのコメントをhas_many_throughアソシエーション内のすべてのユーザーの投稿に表示しようとしています。rails 4未定義のローカル変数レンダリング部分has_many_through
routes.rbを:
resources :posts do
resources :comments
end
モデル:
class User < ActiveRecord::Base
has_many :posts, dependent: :destroy
has_many :comments, :through => :posts, dependent: :destroy
end
class Post < ActiveRecord::Base
belongs_to :user
has_many :comments, dependent: :destroy
end
class Comment < ActiveRecord::Base
belongs_to :user
belongs_to :post
end
users_controller.rb
def activity
@user = current_user
@posts = @user.posts
@comments = @user.comments
end
activity.html.erb
<h4>My Activity</h4>
<ol class="posts">
<%= render @comments.last(3) %>
</ol>
_comment.html.erb
<div class="comment" id="comment-<%= post.id %>-<%= comment.id %>">
<%= link_to smavatar_for(comment.user), user_path(comment.user.name) %>
<span class="user"><%= link_to comment.user.name, user_path(comment.user.name) %></span>
<div class="comment-content">
<%= simple_format(comment.content) %>
</div>
</div>
activity.html.erbの行<%= render @comments.last(3) %>
はのためにクラス
のためにエラーに
未定義のローカル変数やメソッド `ポスト」を与えます_comment.html.erbの
<div class="comment" id="comment-<%= post.id %>-<%= comment.id %>">
行私はおそらく部分的にローカル変数を渡す必要があることを知っている、私はちょうどそれを行う方法を把握することはできません。<%= render @comments.last(3) %>
の代わりに<%= @comments.last(3) %>
を指定すると、ビューにすべてのコメントパラメータが出力されるので、コレクションを認識します。locals: { comment: @comment, post: @post }
を追加すると、クラスの未定義のローカル変数ポストが得られ、post: @comment.post
はnilClassエラーを取得します。私はSOとRoRガイドの前後に行ってきましたが、部分的にレンダリングすることについては後ろ向きにしていますが、私はまだ何を渡すべきかについてはまだ不明です。
同じページに投稿を表示していますか?私はあなたがコメントをどのようにレンダリングするかについては何の問題も見ません。 – mrvncaragay
@ Marv-C、私は同じページに投稿をレンダリングできます。レンダリングはうまくいきますが、このビューはユーザーが他のユーザーから受け取ったコメントをレンダリングするだけです彼らの投稿。 –