2010-11-06 90 views
0

我正在嘗試允許對我創建的Ruby on Rails博客中的帖子進行投票。我真的不想去插件或寶石路線,因爲我覺得我很接近。這裏是的情況:將帖子ID傳遞給posts/index.html.erb中的單獨控制器

我通過部分_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頁面上。

有沒有一種方法可以將post_id傳遞給/posts/index.html.erb視圖中的votes_controller(以及投票表中的post_id列)?

+0

在'VotesController#create'中添加一些像'asdas'這樣的垃圾文本(只是爲了在調用該方法時導致錯誤)。然後投票。該錯誤將顯示正在接收的參數。這些參數顯示了什麼? – Zabba 2010-11-06 06:23:39

+0

我在哪裏將垃圾文本放在方法中?就在第一行之前(@post行)? – bgadoci 2010-11-06 06:25:30

+0

是的,在'def create'後面,在下一行添加'asdfasfsf'。這只是一個簡單的方法來查看控制器操作被調用的參數。當然,這裏有一個插件(不記得名字),但是這種方法效果不錯:) – Zabba 2010-11-06 06:31:01

回答

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 ↑" .......... 

此外,我建議看一看t 優秀RailsCasts by Ryan Bates。那裏有很多很棒的視頻教程。

+0

我得到這個錯誤:被調用的ID爲零,這將錯誤地爲4 - 如果你真的想要的ID爲零,請使用object_id – bgadoci 2010-11-06 06:50:04

+0

錯誤部分'應用程序跟蹤'的第一行是什麼(點擊'應用程序跟蹤') – Zabba 2010-11-06 06:51:58

+0

另外,請加入SO的聊天室:http://chat.stackoverflow.com/rooms/24/ruby-rails。我想避免混淆你的問題!快點,我有30分鐘 – Zabba 2010-11-06 06:53:48