ruby-on-rails - 从 rails 中的 Controller 渲染部分

标签 ruby-on-rails ruby ajax controller

我有一个通过远程 => true 将行添加到数据库的表单。然后我想将新数据附加到表中,但无法获得要呈现的正确 View 。

截至目前,它正在为新条目呈现整个 show.html.erb 页面,但我想布局一个最小版本以添加为 .有没有一种快速的方法可以告诉我的 Controller 在插入数据库后要呈现什么 View ?我想渲染我命名的部分 _newly_added.html.erb

我的 Controller

  def new
    @task = Task.new
    render :partial => "/tasks/newly_added", :locals => { :t => @task }
  end

谢谢!!

编辑 我认为我需要的只是另一种“显示” View 。

我发现我需要改的方法其实是这样的:

  def create
    @task = Task.new(params[:task])

    respond_to do |format|
      if @task.save
        format.html { redirect_to @task, notice: 'Task was successfully created.' }
        format.json { render json: @task, status: :created, location: @task }
      else
        format.html { render action: "new" }
        format.json { render json: @task.errors, status: :unprocessable_entity }
      end
    end
  end

我只需要制作一个替代的显示 View ,然后告诉它重定向到那个 View 。

最佳答案

根据您问题中的更改进行编辑。然而,并没有真正改变。你的想法是错误的,需要调整你的想法。您不需要替代节目,您需要处理 format.js 请求。

部分应该在 JavaScript 响应中呈现,而不是 Controller 。 Controller 看起来更像这样:

  def create
    @task = Task.new(params[:task])

    respond_to do |format|
      if @task.save
        format.html { redirect_to @task, notice: 'Task was successfully created.' }
        format.json { render json: @task, status: :created, location: @task }
        format.js
      else
        format.html { render action: "new" }
        format.json { render json: @task.errors, status: :unprocessable_entity }
        format.js
      end
    end
  end

然后,在 views/tasks/create.js.coffee 中

($ '#mytable').append("<%= j render(partial: 'tasks/newly_added', locals: { t: @task }) %>")

这里发生的事情是浏览器调用 create.js。由于 respond_to block 的 format.js, Controller 使用 create.js 模板进行响应。 j_newly_added.html.erb 文件的内容进行转义,并将其内容附加到表中。 Controller 不与现有 View 交互,而是将 JavaScript 发送到浏览器,并与 View 交互。

如果您使用客户端 MVC 框架(如 Backbone 或 Ember),这一切都会有所改变,但您没有指定,所以我假设您使用的是标准 Rails。

关于ruby-on-rails - 从 rails 中的 Controller 渲染部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13367426/

相关文章:

ruby - 如何从 ruby​​ 程序中确定控制台字符宽度?

ruby - 简单的 Ruby 正则表达式问题

ruby-on-rails - 如何仅在使用 ElasticSearch 和 Tire 存在时按属性过滤搜索?

ruby-on-rails - 与波旁威士忌和 Neat gem 的未定义混合

ruby-on-rails - Rails 表单验证条件绕过

ruby-on-rails - Rails 的词云生成器

ruby - 在 ruby​​ 中类型转换为整数

php - 如何在更改下拉列表时更新两个文本字段

javascript - AJAX POST ---> 未识别的索引?

javascript - 如何提醒 jQuery 文件中的 getJSON 响应?