Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 从rails中的控制器渲染部分_Ruby On Rails_Ruby_Ajax_Controller - Fatal编程技术网

Ruby on rails 从rails中的控制器渲染部分

Ruby on rails 从rails中的控制器渲染部分,ruby-on-rails,ruby,ajax,controller,Ruby On Rails,Ruby,Ajax,Controller,我有一个表单,它通过remote=>true向数据库添加行。然后,我想将新数据附加到表中,但无法获得要渲染的正确视图 到目前为止,它正在为新条目呈现整个show.html.erb页面,但我想布局一个最小版本,作为一个新条目添加。有没有一种快速的方法可以告诉我的控制器在插入db后要渲染什么视图?我想呈现名为_newly_added.html.erb的部分 我的控制器 def new @task = Task.new render :partial => "/tasks/n

我有一个表单,它通过remote=>true向数据库添加行。然后,我想将新数据附加到表中,但无法获得要渲染的正确视图

到目前为止,它正在为新条目呈现整个show.html.erb页面,但我想布局一个最小版本,作为一个新条目添加。有没有一种快速的方法可以告诉我的控制器在插入db后要渲染什么视图?我想呈现名为_newly_added.html.erb的部分

我的控制器

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

编辑 我想我需要的只是另一种“秀”的观点

我发现我需要改变的方法实际上是:

  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

我只需要创建另一个show视图,然后告诉它重定向到该视图。

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

应该在JavaScript响应中呈现部分内容,而不是在控制器中。控制器看起来更像这样:

  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 }) %>")
($'#mytable')。追加(“”)
这里的情况是浏览器调用
create.js
。控制器使用
create.js
模板进行响应,因为
respond\u to
块的
format.js
j
转义新添加的.html.erb文件的内容,并将其内容附加到表中。控制器不与现有视图交互,而是将JavaScript发送到浏览器,并与视图交互


如果您使用的是客户端MVC框架,如主干或Ember,则所有这些都会有所改变,但您没有指定,因此我假设您使用的是stock Rails。

您可以只使用一行的一部分
tr
,并在其中渲染新对象。然后,您可以只获取Ajax调用的响应数据,并将生成的html放入表中。对于这个使用respond_to:js而不使用布局和特定部分的问题,我对我的原始问题做了一些编辑,我想我已经找到了需要发生的事情,但我无法理解语法。与new一样,create也一样。没有什么真正的改变,但我已经调整了我对你编辑的问题的回答。我之前尝试过,但没有成功,但在看到你的帖子后重新修改了它,它成功了。谢谢没问题!你可能想看看Ryan Bates在这方面的优秀铁路司机:。。。专业会员是我每个月花费的最好的9美元。我想补充一点,你必须使用这样的东西:不能得到一个完整的布局渲染!!