好吧,我是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代码:
<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/>这是votes_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我希望这是有意义的。如果我需要澄清什么,请告诉我。
发布于 2009-11-20 23:31:06
看起来我只需要在index.html.erb文件的<% @posts.each do |post| %>部分中更改以下内容。
<% remote_form_for [@post, Vote.new] do |f| %>
<%= f.hidden_field :vote, :value => '1' %>
<%= f.submit "Like" %>至
<% remote_form_for [post, Vote.new] do |f| %>
<%= f.hidden_field :vote, :value => '1' %>
<%= f.submit "Like" %>发布于 2009-11-20 13:12:10
我想这是在制造问题。您没有发布您的posts控制器,但是索引操作是否设置了@post?:
<%= render :partial => @post %>https://stackoverflow.com/questions/1768271
复制相似问题