【问题标题】:rails routes params find for a formrails routes params 查找表单
【发布时间】:2009-12-10 04:43:57
【问题描述】:

我的 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号。到现在为止还挺好。当我尝试对提交内容发表评论时,我遇到了麻烦。每个提交页面都有一个提交 cmets 的表单,如下所示:

<% 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)),它可以完美运行......那我错过了什么?我是不是很傻?

我的人际关系也设置得很好。

提前致谢。

【问题讨论】:

    标签: ruby-on-rails ruby find routes params


    【解决方案1】:

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

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

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

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

    在 cmets 控制器中,您必须掌握该 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
    

    这应该可以解决它,但是我建议将nested resources 作为第二步。

    【讨论】:

    • 效果很好!非常感谢!我今天早些时候刚刚遇到了嵌套资源 railscast 并计划实施它,但尚未找到有关您给我的 hidden_​​field_tag 的任何信息,所以谢谢!
    猜你喜欢
    • 1970-01-01
    • 2018-10-19
    • 2018-10-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多