当前位置: 首页 > 知识库问答 >
问题:

rails form_for从不调用创建控制器操作以使用redirect_to

江宏伟
2023-03-14

我正在使用 Rails 3,并且我在 StatusController 中有一个form_for。当我点击提交按钮时,我的创建方法永远不会被调用。我的创建方法有一个redirect_to:index,但是当我点击提交时,所有信息都保留在表单中,并且页面不会重定向。但是,该对象确实在数据库中正确保存。

这是什么原因造成的?

控制器:

class StatusController < ApplicationController
  def new
    @status = Status.new
  end
  def create
    @status = Status.new(params[:status])
    @status.date_added = Time.now
    if @status.save
    else
      render 'new'
    end
  end

查看:

.well
  =form_for @status do |f|
    =f.label :user_email
    =f.text_field :user_email

    =f.label :added_by
    =f.text_field :added_by

    =f.label :comments
    =f.text_area :comments
    %br
    %br
    =f.submit

我已经将代码调整到此,现在数据在提交时从表单中消失,但是对象永远不会保存,因为永远不会调用“Create”。

共有2个答案

葛驰
2023-03-14

你的控制器看起来有点奇怪...我假设您有Rails 3.2或更高版本。

class StatusController < ApplicationController
  respond_to :html

  def new
    @status = Status.new
  end
  def create
    @status = Status.new(params[:status])

    @status.date_added = Time.now
    @status.save
    respond_with(@status)
  end
end

respond_with是为你做所有的事情。如果保存失败,它将呈现操作,如果保存成功,它将重定向到status_path(@status)。如果要更改重定向行为,可以使用(否则未记录):location 属性来阐明要将用户重定向到何处,也可以通过传递具有一个参数(格式)的块来覆盖默认的“成功”行为。有关详细信息,请参阅其文档。

顺便说一下,如果您使用<code>t。状态迁移中的时间戳s,则您已经有了created_at字段,它由save/update_attributes,因此您不需要date_added

孙文康
2023-03-14

我只是在这里学习Ruby,所以我可能是错的,但如果状态保存正确,看起来你永远不会重定向。

 class StatusController < ApplicationController
  def new
    @status = Status.new
  end
  def create
    @status = Status.new(params[:status])
    @status.date_added = Time.now
    if @status.save
      format.html { redirect_to @status } # Or :index if you want to redirect to index
    else
      render 'new'
    end
  end

当然,请确保您也创建了这些控制器方法和视图。

 类似资料:
  • 本文向大家介绍Yii 框架控制器创建使用及控制器响应操作示例,包括了Yii 框架控制器创建使用及控制器响应操作示例的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Yii 框架控制器创建使用及控制器响应操作。分享给大家供大家参考,具体如下: Yii 框架控制器创建使用 在根目录下的controllers目录下创建控制器HelloController.php: 访问地址:basic/web/i

  • 问题内容: 我正在将数据从javascript应用程序发送到MVC5控制器,但是,当数据提交到Submit controller操作时,它永远不会被调用。我有一些非常简单的映射器,它们创建以下JSON对象: 然后,我使用以下代码发送数据: 我的控制器代码如下: 我有以下问题: 但是,从不会调用Submit,但是,如果我注释掉了控制器参数,那么它将被调用,这是为什么呢? 从上面看来,控制器框架似乎无

  • 假设我有一个名为的扩展,my_extension一个名为的插件。 然后,我的控制器中有一个名为的函数。 如何通过通常的http GET请求从外部调用此?

  • 问题内容: 我有一个不错的页面,可以满足我的所有需求。但是,其中一个元素(部分页面)花费的时间比我要加载的时间长几秒钟。因此,我想做的是先显示该页面,而不显示部分内容,而在其位置显示“正在加载” gif。然后在我的jQuery中… 我想调用我的控制器操作,该操作返回PartialView并更新div内容。它基本上在加载时异步调用部分加载。我可以使用ActionLink做到这一点,直到达到我希望在加

  • 问题内容: 我已经阅读了一段时间,发现可以使用以下命令调用控制器操作: 这是否意味着我应该将MicrosoftMvcAjax.js或MicrosoftAjax.js与Jquery库一起添加? 另外,第二个参数应在$ .ajax()函数中包含什么? 最后,在stackoverflow内或站点外部是否有其他链接可能对带ajax和jquery的asp.net mvc有帮助? 谢谢。 问题答案: 您可以从

  • 问题内容: 如何创建可从所有控制器访问的某种utils捆绑包? 我的主模块中有以下路由代码: 我想是可以通用的功能,和。 我应该如何在AngularJS中做到这一点? 问题答案: 用角度定义通用代码的方法是通过服务。 您将像这样定义一个新服务: 在您的控制器中,您将注入此服务。 只需将CommonCode用作控制器函数的参数即可。Angular会为您注入它(请阅读Dependency Inject