1

我有 3 个模型:帖子、评论和问题。评论属于帖子,问题属于评论。我正在尝试从我的帖子显示页面链接到我的问题显示页面。帖子显示页面正在调用链接所在的部分 _comments。问题是链接转到问题索引而不是问题显示,因为 question.id 为 nil。URL 如下所示:

/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}

谢谢您的帮助!

4

1 回答 1

1

您的问题不是零,问题对象只是没有附加 ID。

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

该行将构建类似于以下内容的查询(忽略带有注释的连接):

SELECT title FROM questions

当您将它传递给它时,comment_question_path(comment, question)它只是读取属性,它不会尝试从数据库中获取它。该问题对象中的 ID 将是nil因为您尚未查询它,因此它为什么要建立一个带有 nil 问题 ID 的链接。

如果您真的想使用select,请comment.questions.select([:id, :title])改用。

如果您不关心使用选择,只需使用comment.questions

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

于 2013-10-28T05:51:27.640 回答