我有一个简单的应用程序,可让用户上传产品,然后对这些产品发表评论。
我目前有产品#show页面,其中列出了该产品的相关评论。这部分是有效的。我似乎无法工作的是,我想在产品#index页面上显示每个产品的评论。
我在想我为产品#show view工作的东西也适用于#index视图,但在我的情况下似乎并非如此。
评论控制器
def create
@product = Product.find(params[:product_id])
@comment = @product.comments.build(params[:comment])
@comment.user = current_user
if @comment.save
redirect_to @product, notice: "Comment was created."
else
render :new
end
end
产品控制器(我不知道我应该在索引操作中添加什么。我没有尝试过任何工作。而且@comments = @ product.comments会对“评论”产生noMethod错误“关于productController #index动作”
def index
@products = Product.all(:include => :comments)
#something about comments, nothing I've tried so far has worked
respond_to do |format|
format.html # index.html.erb
format.json { render json: @products }
end
end
def show
@product = Product.find(params[:id])
@comment = Comment.new
@comment.user = current_user
respond_to do |format|
format.html # show.html.erb
format.json { render json: @product }
end
end
产品#show view (工作)
<div class="comment-wrapper">
<ul class="comments">
<%= render 'comments/comment' %>
<li>
<%= render 'comments/form' %>
</li>
</ul>
</div>
评论部分_comment.html.erb (使用产品#show not work on products #index)
<% @product.comments.each do |comment| %>
<li>
<div class="comment-inner-wrapper">
<div class="comment-controls">
<% if comment.user == current_user %>
<%= link_to [@product, comment], :method => :delete, :confirm => "Are you sure?" do %>
<i class="icon-trash"></i>
<% end %>
<% end %>
</div>
<div class="comment-author-pic">
<%= link_to comment.user do %>
<%= image_tag comment.user.image.url(:thumb) %>
<% end %>
</div>
<div class="comment-author">
<%= link_to comment.user.username, comment.user %>
</div>
<div class="comment-content">
<p><%= comment.content %></p>
</div>
</div>
</li>
产品#index视图(我挂在这里。我的表格适用于每个产品,它会发布一个新的评论,但只有你去#show页面才能看到。评论不会#index视图上的渲染)我得到nil的错误未定义方法`comments':我的评论的第1行的NilClass partial _comment.html.erb
<div class="comment-wrapper">
<ul class="comments">
<%= render 'comments/comment' %>
<li>
<div class="comment-box-wrapper">
<%= form_for [product, Comment.new], :remote => true do |f| %>
<div class="comment-textarea">
<%= f.text_area :content %>
</div>
<div class="actions">
<%= f.submit "Comment", :class => "btn btn-small pull-right" %>
</div>
<% end %>
</div>
</li>
</ul>
</div>
我所有的模特关系都是正确的。任何帮助将不胜感激!!!
编辑以下模型
#product.rb
has_many :comments, dependent: :destroy
#comment.rb
attr_accessible :content, :product_id, :user_id
belongs_to :product
belongs_to :user
答案 0 :(得分:1)
我认为您的型号存在问题。以下是产品和注释的示例代码,允许您访问索引页中每个产品的注释:
#product.rb
class Product < ActiveRecord::Base
attr_accessible :name
has_many :comments
end
#comment.rb
class Comment < ActiveRecord::Base
attr_accessible :product_id, :text
belongs_to :product
end
#products_controller.rb
class ProductsController < ApplicationController
def index
@products = Product.all
end
end
编辑如果你想使用partial进行评论,它应该是这样的。
#products/index.rb
<% @products.each do |p| %>
<%= p.name %>
<%= render 'products/comments', :product => p %>
<% end %>
#_comments.html.erb
<% product.comments.each do |c| %>
<%= c.text %>
<% end %>