ruby-on-rails – 从rails中的控制器渲染一部分

前端之家收集整理的这篇文章主要介绍了ruby-on-rails – 从rails中的控制器渲染一部分前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个表单,通过remote =>向DB添加行.真正.然后我想把新的数据附加到表中,但是不能得到正确的渲染视图.

到目前为止,它正在渲染整个show.html.erb页面的新条目,但我想要布局一个最小版本作为添加.有一个快速的方式来告诉我的控制器在插入数据库后要渲染哪个视图?我想渲染我的部分命名_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

我只需要做一个替代的显示视图,然后告诉它重定向到该视图.

解决方法

根据您的问题的更改编辑.但是,没有什么真正的变化.你在想错了,需要调整你的想法.你不需要一个替代节目,你需要处理format.js请求.

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

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

    respond_to do |format|
      if @task.save
        format.html { redirect_to @task,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.控制器响应create.js模板,因为respond_to块的format.js. j转义_newly_added.html.erb文件内容,并将其内容附加到表中.控制器不与现有视图进行交互,而是将JavaScript发送到浏览器,并与视图进行交互.

如果您使用像骨干或Ember这样的客户端MVC框架,这一切都会有所改变,但是您没有指定这一点,所以我假设您将使用库存Rails.

原文链接:https://www.f2er.com/ruby/271515.html

猜你在找的Ruby相关文章