Вопрос Ajax - Ruby on Rails - Ошибка: не удалось найти сообщение без идентификатора

Хорошо, я новичок в рельсах, поэтому надеюсь, что объяснил это хорошо. Кажется, у меня проблема с формой, собирающей правильную информацию. Работайте в одном месте, а не в другом. Вот ситуация.

Я создал блог с тремя таблицами, постами, комментариями и голосами. У меня комментарии работают правильно, а голоса работают частично. Вот что я имею в виду.

Файл /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

Я надеюсь в этом есть смысл. Дайте мне знать, если мне нужно что-то уточнить.


person bgadoci    schedule 20.11.2009    source источник
comment
Можете ли вы опубликовать свои действия show и index из контроллера сообщений?   -  person Andy Gaskell    schedule 20.11.2009


Ответы (2)


Я предполагаю, что это вызывает проблемы. Вы не разместили свой контроллер сообщений, но установлено ли действие индекса @post?:

<%= render :partial => @post %>
person Ben    schedule 20.11.2009
comment
Это то, что я думал, но это все портит, когда я пытаюсь это сделать. В основном все тело сообщения уходит. - person bgadoci; 20.11.2009

Похоже, мне просто нужно было изменить следующее в ‹% @posts.each do |post| %> в файле index.html.erb.

<% remote_form_for [@post, Vote.new] do |f| %>
        <%= f.hidden_field :vote, :value => '1' %>
        <%= f.submit "Like" %>

to

<% remote_form_for [post, Vote.new] do |f| %>
        <%= f.hidden_field :vote, :value => '1' %>
        <%= f.submit "Like" %>
person bgadoci    schedule 20.11.2009