У меня есть простое приложение, которое позволяет пользователям загружать продукты, а затем комментировать эти продукты.Комментарии к списку товаров # index view
В настоящее время у меня есть страница #show с соответствующими комментариями к этому продукту. Так что эта часть работает. Кажется, что я не могу работать, я хотел бы показать комментарии для каждого продукта на странице #index продуктов.
Я думал, что то, что я работаю для представления # show, также будет работать для представления #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)
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
Продукты # показать просмотреть (горе очий)
<div class="comment-wrapper">
<ul class="comments">
<%= render 'comments/comment' %>
<li>
<%= render 'comments/form' %>
</li>
</ul>
</div>
Комментарии частичная _comment.html.erb (работа в продуктах # показать не работает на продукты # индекс)
<% @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>
вид Продукция # индекс (Im повесила Вот. У меня есть форма, работающая для каждого продукта, и она выведет новый комментарий, но будет видна только в том случае, если вы перейдете на страницу #show. Комментарии обыкновение оказывать на представлении #index) я получаю ошибку неопределенный метод `комментарии для ноль: NilClass для линии № 1 из моих комментариев частичное _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
Спасибо за ответ! К сожалению, это приводит к той же ошибке, что и раньше. NoMethodError в продуктах # index undefined комментарий метода для nil: NilClass, Extracted source (вокруг строки # 16): '<% p.comments.each do | c | %> ' – itsthewrongway
стр. Я опубликовал свои модели выше в редактировании. они уже были, как вы предполагали. – itsthewrongway
Это, вероятно, означает, что комментариев экземпляра продукта, к которому вы пытаетесь получить доступ, не существует. Я думаю, что частичное для каждого комментария пробы пытается получить доступ к @product, который не обеспечивается действием контроллера индекса. Вы должны передать продукт частичным через свой индексный вид. –