将帖子ID传递给Posts / index.html.erb中的独立控制器

时间:2010-11-06 05:48:18

标签: ruby-on-rails ruby controller

我正在尝试允许对我创建的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列)?

1 个答案:

答案 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 。那里有很多很棒的视频教程。