0

我的 Rails 应用程序有点问题。简而言之,它是一个社交网络应用程序,用户可以在其中拥有个人资料、提交内容并可以评论提交内容。

我的路线如下:

map.connect '/:username', :controller => 'users', :action => 'show'  
map.connect '/:username/:id', :controller => 'submissions', :action => 'show'

因此,当他们查看提交时,URL 看起来像:

http://www.example.com/users_username/2342

数字是类别的 id 号。到现在为止还挺好。当我尝试对提交内容发表评论时,我遇到了麻烦。每个提交页面上都有一个提交评论的表单,如下所示:

<% form_for Comment.new do |f| %>  
    <%= f.text_area :message %>  
    <%= f.submit "Submit", :disable_with => 'Submitting...' %>  
<% end %>  

控制器看起来像这样:

def create
    submission = Submission.find(params[:id])
    comment = cat.comments.create(params[:comment])
    comment.created_at = Time.now
    comment.save
    redirect_to submission
end

现在,每次我尝试提交评论时,Rails 都会返回:

ActiveRecord::RecordNotFound in CommentsController#create Couldn't find Submission without an ID or undefined method `answers' for nil:NilClass  

基本上,rails 没有使用参数从 URL 中提取 :id,我不知道为什么。提交页面为 URL 中的每个 ID 正确显示,所以我不明白为什么它不为这个表单拉它。如果我明确命名 id(IE Submission.find(2345)),它可以完美运行......那我错过了什么?我只是愚蠢吗?

我的人际关系也建立得很好。

提前致谢。

4

1 回答 1

3

以下代码正在生成一个提交给comments控制器的表单:

<% form_for Comment.new do |f| %> 

我相信您必须在表单中传递提交 ID:

<%=hidden_field_tag(:submission_id, @submission.id)%>

在评论控制器中,您必须掌握该 ID:

def create
    submission = Submission.find(params[:submission_id])
    comment = submission.comments.create(params[:comment])
    comment.created_at = Time.now
    comment.save
    redirect_to submission
end

那应该可以解决它,但是我建议将嵌套资源作为第二步。

于 2009-12-10T18:44:12.280 回答