我是铁杆新手。 我可以创建一个控制器,它将获取json数据并更新db中的多个表吗?这个控制器会在视野中发挥作用。
我正在做以下事情: - 的 routes.rb中:
post '/data' => 'data#submit'
应用/控制器/ data_controller.rb:
class DataController < ApplicationController
def submit
data = JSON.parse request.body.read
puts data
end
end
然后发送帖子请求,
RestClient.post "localhost:3000/submit_result", data.to_json, {:content_type => :json}
但这是错误的错误
ActionController::RoutingError (uninitialized constant DataController)
答案 0 :(得分:1)
您需要在config / routes.rb中为它创建路由。
如果您只有这个动作,那么定义将类似于
resource :data, only: [] do
post :submit
end
only: []
=&gt;这使得默认的CRUD操作没有被创建。
然后在您的控制器中,您可以执行以下操作:
class DataController < ApplicationController
def submit
data = JSON.parse params[:some_key]
puts data
render nothing: true # this will avoid view rendering
end
end
你的休息客户应该这样打电话:
RestClient.post "localhost:3000/data/submit", data.to_json, {:content_type => :json}
关于是否可以从该控制器更新多个表:是的,可以。
假设您使用以下格式发送数据:
RestClient.post&#34; localhost:3000 / data / submit&#34;,{user:{name:&#39; John&#39;},角色:{name:&#39; admins&#39; } .to_json,{:content_type =&gt; :JSON}
然后,在您的控制器中,您可以根据收到的参数创建用户和角色:
class DataController < ApplicationController
def submit
User.create params[:user]
Role.create params[:role]
render nothing: true # this will avoid view rendering
end
end
无论如何,这可能会使控制器的代码很快变得复杂。最好的方法是创建一个接收params的新类并创建你需要的东西。
class DataController < ApplicationController
def submit
MassDataCreator.create(params)
render nothing: true # this will avoid view rendering
end
end
这样做的好处是控制器代码看起来更清晰,您可以为创建数据的新类编写单元测试(通过单元测试,通过单元测试,单个测试总是更容易集成测试)