3

我正在构建我的第一个 rails 应用程序,并且对 ruby​​ 和 rails 都很陌生。通过ajax提交表单后,我试图在页面上呈现提交消息。

我在表单中添加了 :remote => true 参数。但是,我似乎无法在我的应用程序中呈现消息。作为测试,我设置了一个新的 Rails 应用程序,并使用脚手架生成了带有表单的帖子模型和视图等。

我将远程 :remote => true 添加到生成的表单中。它将数据很好地提交给数据库。我已经读过我可以更新控制器以包含带有 format.js 的 js,在这种情况下将 posts_controller.rb 函数更新为

def new
  @post = Post.new

  respond_to do |format|
    format.html # new.html.erb
    format.js
  end
end

一些教程说你可以在views/posts文件夹中添加一个new.js.erb或create.js.erb(不确定应该是哪个),这应该被执行,但除了提交的数据之外什么都没有发生.

我也试过:

format.js { render :js => "alert('Hello Rails');" }   

作为测试。

我正在使用 rails 3.1 并且不知道接下来应该尝试什么

4

1 回答 1

7

您快到了。提交的表单由 create 操作处理,而不是由 new 处理。你已经掌握了处理 html 或 js 的语法——你只需要在你的 create 操作中使用它,以及一个包含你想要渲染的 js 的 create.js.erb。

你的 PostsController 应该有一个 create 函数,类似于

def create
  @post = Post.new(params[:post])

  respond_to do |format|
    if @post.save
      format.html 
      format.js 
    else
      format.html { render :action => 'new' }
      format.js   { render 'fail_create.js.erb' }
    end
  end
end

创建一个名为 create.js.erb 的文件(在帖子的视图目录中),包含

alert('Hello Rails');

对于成功案例,您应该很高兴。创建另一个名为fail_create.js.erb 的文件,其中包含您希望在失败时呈现的任何javascript(例如,当提交的表单数据未通过模型的验证时)。

于 2012-04-30T22:00:20.503 回答