处理这个问题的最好方法是从 Web 应用程序中提供一个 API,外部应用程序可以与之交互。Rails 的一大优点是它基本上支持开箱即用。
采取典型的控制器操作从网络查看学生。
class StudentsController < ApplicationController
def show
@student = Student.find(params[:id])
end
end
发出请求/students/1
后,students/show
将为 ID#1 的学生呈现模板。
Rails 能够将 xml/json 附加到 URL 的末尾,以便使用不同的格式类型请求处理。
class StudentsController < ApplicationController
respond_to :html, :json
def show
@student = Student.find(params[:id])
respond_with(@student)
end
end
这设置了 ActionController 的一个功能,称为 Responder。现在,当向控制器发出请求时,/students/1.json
将调用as_json
Student 模型,该模型默认获取所有模型属性并将其转换为 json 对象。这可以通过覆盖学生模型中的 as_json 来定制。
要进行更新,您可以遵循类似的模式。您使用 PUT 请求向服务器提交/students/1.json
. 请求不是 JSON 格式,您使用的库可能支持设置变量,请确保它采用 Rails 期望的格式(即student[field]
)。Rails 中间件将负责其余的工作。
class StudentsController < ApplicationController
respond_to :html, :json
def update
@student = Student.find(params[:id])
@student.update_attributes(params[:student])
respond_with(@student)
end
end
请注意,使用 Responders 不会检查 update_attributes 是否有效,它respond_with
会为您执行此操作。如果有错误,您将获得 HTTP 422 Unprocessable Entity 作为响应代码,并且响应的主体将是带有错误的 JSON 对象。
还值得一提的是,如果您更喜欢 XML 响应正文而不是 JSON,则可以在所有这些示例中替换为json
。xml