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. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |