首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Ajax问题- Ruby on Rails -错误:找不到没有ID的帖子

Ajax问题- Ruby on Rails -错误:找不到没有ID的帖子
EN

Stack Overflow用户
提问于 2009-11-20 12:04:49
回答 2查看 647关注 0票数 0

好吧,我是rails的新手,所以我希望我能很好地解释这一点。我似乎对收集适当信息的表单有问题。在一个地方工作而不是在另一个地方工作。情况是这样的。

我已经创建了一个包含三个表、帖子、评论和投票的博客。我有正确的评论和投票部分工作。这就是我的意思。

/ post /show.html.erb文件基本上显示了帖子和相关的评论,并显示了该帖子的投票数。我正在处理投票,但使用了一个带有隐藏字段的表单,该表单将值'1‘连同post_id一起传递到表中。然后,我使用AJAX返回@post.votes.count。这一切都很好用。

我尝试在/post/index.html.erb页面上使用上面提到的相同的投票/返回。在索引页面中,我让<% @post.each do |post| %>做两件事。首先呈现:部分=> post %>,然后我拥有与show.html.erb页面上使用的代码相同的代码。我从终端得到的错误是

ActiveRecord::RecordNotFound (找不到没有ID的帖子):app/controllers/votes_Controler.rb:4:in` `create‘

我猜这与它是索引记录集的一部分有关,而索引记录集没有与页面关联的唯一post参数。我希望有一个简单的解决办法。代码如下:

这是正常工作的/post/show.html.erb代码:

代码语言:javascript
复制
<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/>

下面是它在索引页中的位置:

代码语言:javascript
复制
<% @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/>

这是votes_controller.rb

代码语言:javascript
复制
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

代码语言:javascript
复制
page.replace_html  :votes, :partial => @vote
page[@vote].visual_effect :highlight

最后,这里是部分,/_vote.html.erb:

代码语言:javascript
复制
page.replace_html  :votes, :partial => @vote
page[@vote].visual_effect :highlight

我希望这是有意义的。如果我需要澄清什么,请告诉我。

EN

Stack Overflow用户

回答已采纳

发布于 2009-11-20 23:31:06

看起来我只需要在index.html.erb文件的<% @posts.each do |post| %>部分中更改以下内容。

代码语言:javascript
复制
<% remote_form_for [@post, Vote.new] do |f| %>
        <%= f.hidden_field :vote, :value => '1' %>
        <%= f.submit "Like" %>

代码语言:javascript
复制
<% remote_form_for [post, Vote.new] do |f| %>
        <%= f.hidden_field :vote, :value => '1' %>
        <%= f.submit "Like" %>
票数 0
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1768271

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档