2013-10-28 71 views
1

我有3個模型:帖子,評論和問題。評論屬於帖子,問題屬於評論。我試圖從我的帖子顯示頁面鏈接到我的問題顯示頁面。帖子顯示頁面正在調用鏈接所在的部分_comments。問題是鏈接轉到問題索引而不是問題顯示,因爲question.id爲零。該URL看起來是這樣的:無id導致路由問題

/comments/19/questions/ 

的路線:

comment_question GET /comments/:comment_id/questions/:id(.:format)   questions#show 
comment_questions GET /comments/:comment_id/questions(.:format)   questions#index 

在_comments鏈接部分:

<%= div_for(comment) do %> 
<% comment.questions.select(:title).order('created_at desc').limit(3).each do |question| %> 
<%= link_to question.title, comment_question_path(comment, question) %> 
<% end %> 
<% end %> 

的部分是所謂的帖子顯示頁面與此:

<%= render :partial => @post.comments %> 

我改變了鏈接爲此:

<%= url_for :controller => 'questions', :action => 'show', :comment_id => comment.id, :id => question.id %> 

,但得到這個錯誤:

No route matches {:action=>"show", :controller=>"questions", :id=>nil, :comment_id=>20} 

感謝您的幫助!

+0

可以添加你的瀏覽器顯示在這個錯誤的時間的網址是什麼? – dirtydexter

+0

localhost:3000/posts/19 – user2759575

回答

1

你的問題不是零,問題對象沒有附加ID。

<% comment.questions.select(:title).order('created_at desc').limit(3).each do |question| %> 

這條線將建成類似於查詢以下(忽略與評論連接):

SELECT title FROM questions 

當你傳遞給comment_question_path(comment, question)它只是讀取屬性,它並不試圖獲取它來自數據庫。該問題對象中的標識將爲nil,因爲您尚未查詢該標識,因此爲什麼它正在構建帶有無問題ID的鏈接。

如果您確實想使用select,請改爲使用comment.questions.select([:id, :title])

如果您不在意使用select,只需使用comment.questions來代替。在select

更多信息:http://guides.rubyonrails.org/active_record_querying.html#selecting-specific-fields

+0

這給了我錯誤的參數個數(2代表1)錯誤。 – user2759575

+0

順便說一句,我不需要使用選擇,任何替代品,讓我最後兩個評論標題作品。 – user2759575

+0

編輯了修復選擇語法的答案,並給出了選擇的替代方案。 – Roganartu