我正在尝试允许对我创建的Ruby on Rails博客中的帖子进行投票。我真的不想去插件或宝石路线,因为我觉得我很亲密。情况如下:
我通过部分_post.html.erb在/posts/index.html.erb中显示我的所有帖子。每个帖子我都会为投票按钮呈现以下代码:
<% remote_form_for [@post, Vote.new] do |f| %>
<%= f.hidden_field :ip_address, :value => "#{request.remote_ip}" %>
<%= submit_tag 'Me Too', :class => 'voteup' %>
<% end %>
通过投票控制器发送请求:
def create
@post = Post.find(params[:post_id])
@vote = @post.votes.create!(params[:vote])
respond_to do |format|
format.html { redirect_to @posts}
format.js
end
end
我得到的错误是Couldn't find Post without an ID
这是有道理的,因为我不在/posts/show.html.erb页面上。
有没有办法可以从/posts/index.html.erb视图将post_id传递给votes_controller(以及投票表中的post_id列)?
答案 0 :(得分:0)
尝试在remote_form_for
:
<%= f.hidden_field :post_id, :value => @post.id %>
您可能还需要def create
@post = Post.find(params[:vote][:post_id]) #note the added [:vote]
如果您在这些更改后查看参数,则应显示:
{"vote"=>{"ip_address"=>"127.0.0.1", "post_id"=> >>actual-post-id-here<< },
"commit"=>"Vote Up ↑" ..........
此外,我建议您查看优秀 RailsCasts by Ryan Bates 。那里有很多很棒的视频教程。