免责声明:我正在做一些可能有资格获得2015年Code Smell奖的东西。使用rails 4.2,没有javascript或类似的东西。
我有一个用户输入数据的表单。有了这些数据,我就称之为第三方API,它仍然是无名的。 :)
我没有模特,我没有坚持任何事情。 (一个较大的应用程序的一部分,而不是一个单页面。)因此,当面对向用户呈现响应时,我发现自己陷入了如何将数据正确呈现到视图中。响应包含一个哈希数组,我显然打算向用户呈现。
我将表单渲染成小部件/ new等,创建并处理请求等,但那又是什么?
我想也许我可以利用装饰工来做我的肮脏工作,但不知道如何让用户真正进入相应的视图。我不在乎哪种观点。称之为widget_path。
WidgetsController < ApplicationController
def new
render :new
end
def create
# preparing request
...
# data = response, each_serializer, WidgetSerializer, root: false
# data = WidgetDecorator.new(render_serialized(response, WidgetSerializer))
# @data = WidgetDecorator.new(JSON.parse(response))
# redirect_to ??_path ... and take your @data with you
end
end
我该怎么办?
答案 0 :(得分:1)
您对模型的想法不幸被Rails本身损坏(抱歉)。 模型是业务逻辑 而不是ActiveRecord :: Base (不一定)。控制器方法不应该很大,~5行长可能是最大值,每个控制器文件最多~100行。尽量坚持这一点,它会自动纠正好的代码气味。
无论如何,您可以使用 Model 处理此事件,作为PORO(普通旧ruby对象)。
class MyApiResponse
attr_reader :myapikey
attr_reader :whatever
def initialize(myapikey, whatever)
@myapikey = myapikey
@whatever = whatever
end
def get
@_response ||= JSON.parse(run_api_stuff(myapikey))
end
end
所以在控制器中你会做类似
的事情def create
myapiresponse = MyApiResonse.new(myapikey, whatever)
@response = myapiresponse.get
end
最后但并非最不重要的是,您无法在重定向中传递通过API获得的内容。您受HTTP限制,因此,您对GET参数大小有限制,会话限制,您无法重定向到POST。你有3个选择