RubyonRails环境控制器操作JavaScript响应
Ruby on Rails Circumstantial Controller Action JavaScript Response
假设我有请求:Request
。请求必须由管理员批准或拒绝。
我正在为请求设计一个在索引页面上带有批准/拒绝按钮的UI。类似于脚手架生成的删除按钮。
我面临的问题是,我想根据AJAX请求来自的页面,以不同的方式响应它。
我有一个可能使用的操作update
,但update.js.erb
中的JavaScript响应是为具有形式/requests/1/edit
的编辑页设计的。
我处理过的唯一一个工作感觉像是打破了惯例,并创建了一个重复代码的无用操作。
我所做的是添加动作update_status
,它有自己的*.js.erb
响应来做一些类似于索引页上的UI更改的事情。
我觉得我想做的是非常标准的UI,我喜欢CRUD操作的想法,但我面临着一堵墙。
有没有办法在update.js.erb
中做到这一切。我可以发送不同的*.js.erb
响应吗?我的变通方法有效,但这是唯一的方法吗?
感谢您的支持、经验和专业知识!
编辑
代码示例:
# app/controllers/requests_controller.rb
class RequestsController < ApplicationController
before_action :authenticate_admin!
before_action :set_request
def update
# permitted_request_params permits editable request fields
if @request.update(permitted_request_params)
# handles success
else
# handles failure
end
end
def update_status
if @request.update(status: params[:status])
# handles success
else
# handles failure
end
end
private
# more stuff
end
# app/views/requests/update.js.erb
// code to signal that the update was successful or not on /requests/1/edit
# app/views/request/update_status.js.erb
// code that changes the UI to show the request was approved and signal successfully update of status
理想情况下,一切都可以在update.js.erb
文件中完成,然后我可以删除update_status
操作。
编辑2
我看到一个例子,有人做了一个approve
和decline
动作。也许这会更好,因为如果你正在制作一个库来接口你的应用程序(例如Stripe、Heroku、Cloudflare等),它会更明确。
request.approve -> PUT /request/1/approve
我真的不喜欢我的方法,但像这样沉默似乎也不算太糟糕。
好吧,有不同的action
来更新相同的resource
,那么request
不是DRY
。无论请求来自哪个页面,都会更新相同的特定request
对象。
因此,reuse
的作用优于update
。要确定请求来自哪个页面,可以给name
以提交按钮。
<%= submit_tag 'Update', name: 'update_status_only' %>
<%= submit_tag 'Update', name: 'update_request' %>
则在CCD_ 21 中
def update
# permitted_request_params permits editable request fields
if @request.update(permitted_request_params)
# handles success
else
# handles failure
end
if params[:update_status_only]
render 'update_status'
end
end
听起来您正试图弄清楚如何编写一个用几个不同HTML页面发送的Javascript文件。
有几种方法可以做到这一点。
最简单的选择是将文件放在app/assets/javascripts
中,并在application.js
中写入一行//= require myfile
。这将使它包含在每个HTML响应中。
您也可以使用javascript_include_tag在每页的基础上包含一个脚本。
除了在两个不同的页面上加载相同的脚本外,还有一个问题是如何实际编写这个脚本。它可能需要进行重构,使其更通用(这样它就可以在两个用例中工作,而不是在一个用例中)。
- 如何从SeleniumWebdriver获取异步Javascript响应
- 如何从java中的URL读取JavaScript响应
- 节点,express应用程序返回text/javascript响应头(Content-Type),尽管设置了applic
- 正在Javascript响应中设置会话变量
- 将Javascript响应转换为Array/Map
- Javascript-响应式商店;多个项目-每个项目具有不同的价格值
- RubyonRails环境控制器操作JavaScript响应
- 在ajax请求中使用jquery获取javascript响应UJS
- 在 WordPress 上调用 Javascript 响应式工具提示
- Rails 4 - 强制浏览器执行javascript响应而不是显示文本
- 使用rails在javascript响应中呈现Haml文件
- 轨道3-逃逸部分's在javascript响应中生成了html
- 来自form_for的控制器中的Ajax javascript响应以纯文本形式呈现
- 从PHP登录函数获取javascript响应
- 如何正确地为javascript响应块发送ajax请求
- 加载页面的Javascript响应没有显示在虽然我能从火虫身上看出来
- 动态加载外部JavaScript响应
- Rails默认为"text/javascript"响应使用form_for构建的非显眼JavaScr
- Servlet中的Javascript响应与sendRedirect()冲突
- Android在线服务器接收JavaScript响应而不是Json