【问题标题】:Rails ignoring render and redirect_toRails 忽略 render 和 redirect_to
【发布时间】:2008-10-21 20:22:32
【问题描述】:

我在这里有一个非常简单的 rails 问题,但我似乎无法在任何地方找到答案。我想一些问题源于我遵循 Rails 1.2 和 Rails 2.1 的教程。反正..

我正在编写一个博客系统,并且正在实现 cmets 位。使用脚本/控制台创建 cmets 后,我的 cmets 显示良好,但让评论表单本身工作很难。

在 posts_controller.rb 我有

  def comment
    Post.find(params[:id]).comments.create(params[:comment])
    flash[:notice] = "Added comment"
    #render :action => show
    redirect_to :action => show
  end  

在 show.html.erb(视图)中我有

<%= form_tag :action => "comment", :id => @post %>
  <%= text_area "comment", "body" %><br>
  <%= submit_tag "Post Comment" %>

当我提交表单时,它会尝试转到 urb /posts/comment/1,这显然是不正确的,并且它抱怨找不到模板。显然我不想要一个模板,因为我已经告诉它重定向到显示操作,因为我希望它只是重新显示帖子的显示页面,那里有新的评论。

我已经尝试了注释掉的行 (render :action => show) 和 redirect_to 行,但似乎都没有做任何事情。

我确定我遗漏了一些简单的东西,但它是什么?

【问题讨论】:

    标签: ruby-on-rails ruby


    【解决方案1】:

    redirect_to :action =&gt; 'show', :id =&gt; params[:id] 用引号括起来显示有效吗?​​

    【讨论】:

      【解决方案2】:

      Rails 2.1 包含“RESTful 资源”。 show 恰好是所有 Rails 控制器使用的预定义 REST 操作之一的名称。

      Rails 在幕后做了一些魔术, :show 相当于“显示具有特定给定 ID 的特定元素”。听起来好像和那个混在一起了。 ID 可能默认为“1”。因此,您从渲染调用中看到生成的 URL

      Rails 2.1 的做法将使用以下动作和模板:

      • index - 显示完整的 cmets 列表
      • create - 添加新评论
      • show - 仅显示特定评论(不是完整列表)。听起来这不是您想要的,但 rails 内部的“魔法”将默认为这个。

      还有new(显示视图以输入新评论)edit(显示视图以编辑现有评论)update(处理更新提交)和destroy(duh)的操作,但您似乎不会在此示例中使用它们。

      你有教程的链接吗?将它移植到 Rails 2.1 风格不会太难。

      【讨论】:

      【解决方案3】:

      是的,你使用旧的 Rails 样式。

      一些新的东西:

         form_for :comment, :url => { :post_id => @post } do |f|
           f.text_area :body
           submit_tag "Post"
         end
      

      您可以将资源用于帖子和 cmets,搜索 google 以获得更好的教程或安装 rails 1.2.6:

      gem install -v 1.2.6 rails
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-04
        • 2017-02-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-01-31
        相关资源
        最近更新 更多