Хорошо, я новичок в рельсах, поэтому надеюсь, что объяснил это хорошо. Кажется, у меня проблема с формой, собирающей правильную информацию. Работайте в одном месте, а не в другом. Вот ситуация.
Я создал блог с тремя таблицами, постами, комментариями и голосами. У меня комментарии работают правильно, а голоса работают частично. Вот что я имею в виду.
Файл /posts/show.html.erb в основном показывает сообщение, связанные с ним комментарии и показывает, сколько голосов получило это сообщение. Я работаю с голосами, но использую форму со скрытым полем, которое доставляет значение «1» вместе с post_id в таблицу. Затем я использую AJAX для возврата @post.votes.count. Все это прекрасно работает.
Я пытаюсь использовать то же самое голосование/возврат, упомянутое выше, но на странице /posts/index.html.erb. На главной странице у меня есть ‹% @post.each do |post| %> делает две вещи. Сначала визуализируйте :partial => post %>, а затем у меня есть тот же код, что и на странице show.html.erb. Ошибка, которую я получаю от терминала,
ActiveRecord::RecordNotFound (не удалось найти сообщение без идентификатора): app/controllers/votes_controller.rb:4:in `create'
Я предполагаю, что это связано с тем, что он является частью набора записей индекса, который не имеет уникального параметра публикации, связанного со страницей. Я надеюсь, что есть простое решение. Вот код:
Это код /posts/show.html.erb, который работает правильно:
<div id="backto"<%= link_to 'Back to all BattleCries', posts_path %>
</div>
<%= render :partial => @post %>
<div id="beltcomments">
<div id="beltcommenttext">
<div id="vote">
<div id="votes">
<%= @post.votes.count %> People liked this BattleCry.
</div>
</div>
<div id="votebutton">
<% remote_form_for [@post, Vote.new] do |f| %>
<%= f.hidden_field :vote, :value => '1' %>
<%= f.submit "Like" %>
<% end %>
</div>
</div>
</div>
<div id="beltcommentsbottom">
</div><br/><br/>
<div id="belt">
<div id="belttext">
<p5>Add a Comment</p5>
<% remote_form_for [@post, Comment.new] do |f| %>
<p>
<%= f.text_area ( :body, :class => "commentarea") %>
</p>
<%= f.submit "Add Comment"%>
<% end %>
</div>
<div id="beltbottom">
</div>
</div><br/>
<div id="comments">
<%= render :partial => @post.comments %>
</div>
<br/>
<div id="commenttime">
Copyright 2009, My Life BattleCry, LLC.
</div>
<br/>
<br/>
<br/>
Вот где он находится на главной странице:
<% @posts.each do |post| %>
<%= render :partial => post %>
<%= render :partial => @post %>
<div id="beltcomments">
<div id="beltcommenttext">
<div id="vote">
<div id="votes">
<%= post.votes.count %> People liked this BattleCry.
</div>
<%= link_to "Comments (#{post.comments.count})", post %>
</div>
<div id="votebutton">
<% remote_form_for [@post, Vote.new] do |f| %>
<%= f.hidden_field :vote, :value => '1' %>
<%= f.submit "Like" %>
<% end %>
</div>
</div>
</div>
<br/>
<br/>
<br/>
<% end %>
<div id="commenttime">
Copyright 2009, My Life BattleCry, LLC.
</div>
<br/>
<br/>
<br/>
Вот файл voices_controller.rb
class VotesController < ApplicationController
def create
@post = Post.find(params[:post_id])
@vote = @post.votes.create!(params[:vote])
respond_to do |format|
format.html { redirect_to @post}
format.js
end
end
end
Вот /votes/create.js
page.replace_html :votes, :partial => @vote
page[@vote].visual_effect :highlight
Наконец, вот частичный /_vote.html.erb:
page.replace_html :votes, :partial => @vote
page[@vote].visual_effect :highlight
Я надеюсь в этом есть смысл. Дайте мне знать, если мне нужно что-то уточнить.