【发布时间】:2009-11-20 04:04:49
【问题描述】:
好的,我是 Rails 新手,所以我希望我能解释清楚。我似乎对收集正确信息的表格有疑问。在一个地方工作,而不是另一个地方。这是情况。
我创建了一个包含三个表格、帖子、cmets 和投票的博客。我的 cmets 工作正常,投票部分工作。这就是我的意思。
/posts/show.html.erb 文件基本上显示了帖子、相关的 cmets,并显示了该帖子的投票数。我正在投票,但使用带有隐藏字段的表单,该表单将值“1”与 post_id 一起传递到表中。然后我使用 AJAX 返回@post.votes.count。这一切都很好。
我正在尝试在 /posts/index.html.erb 页面上使用上述相同的投票/返回。在索引页面中,我有 做两件事。首先渲染 :partial => post %> 然后我有我在 show.html.erb 页面上使用的相同代码。我从终端得到的错误是
ActiveRecord::RecordNotFound(找不到没有 ID 的帖子): 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/>
这是 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
我希望这是有道理的。如果我需要澄清任何事情,请告诉我。
【问题讨论】:
-
您可以从 Posts 控制器发布您的显示和索引操作吗?
标签: ruby-on-rails ruby ajax blogs