Ruby on rails Rails:将API JSON响应传递给视图,不带模型
免责声明:我正在做的事情可能有资格获得2015年代码气味奖。使用Rails4.2,没有javascript之类的东西 我有一个表单,用户可以在其中输入数据。有了这些数据,我调用了第三方API,该API将保持匿名状态。:) 我没有模型,我没有坚持任何东西。(一个更大的应用程序的一部分,而不是一个页面。)因此,当面对向用户呈现响应时,我发现自己陷入了如何将数据正确呈现到视图中的困境。响应包含一个哈希数组,我显然打算向用户展示它 我将表单呈现为widget/new等,创建并处理请求等,但是接下来呢 我想也许我可以利用装饰师来完成我的脏活,但不知道如何让用户真正进入各自的视图。我不在乎哪种观点。称之为小部件路径Ruby on rails Rails:将API JSON响应传递给视图,不带模型,ruby-on-rails,json,decorator,Ruby On Rails,Json,Decorator,免责声明:我正在做的事情可能有资格获得2015年代码气味奖。使用Rails4.2,没有javascript之类的东西 我有一个表单,用户可以在其中输入数据。有了这些数据,我调用了第三方API,该API将保持匿名状态。:) 我没有模型,我没有坚持任何东西。(一个更大的应用程序的一部分,而不是一个页面。)因此,当面对向用户呈现响应时,我发现自己陷入了如何将数据正确呈现到视图中的困境。响应包含一个哈希数组,我显然打算向用户展示它 我将表单呈现为widget/new等,创建并处理请求等,但是接下来呢 我
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
WidgetsController
我该怎么办 不幸的是,您对模型的想法被Rails本身破坏了(对不起)。
模型是业务逻辑而不是ActiveRecord::Base(不一定)。控制器方法不应该太大,~5行可能是最大长度,每个控制器文件最多100行。试着坚持这一点,它会自动纠正代码的味道
无论如何,您可以用一个模型来处理这个问题,比如PORO(普通的老ruby对象)
所以在控制器中,您可以执行以下操作
def create
myapiresponse = MyApiResonse.new(myapikey, whatever)
@response = myapiresponse.get
end
最后但并非最不重要的一点是,您不能在重定向中传递通过API获得的内容。您受到HTTP限制,因此,GET参数大小有限制,会话有限制,并且无法重定向到POST。你有3个选择
明白了,谢谢@Fire,非常有用。我在看#1。将任何JSON响应作为字符串持久化并在您认为的另一端进行解析是否可行?是的,这应该是绝对可行的。但是,如果您只存储(对于当前用户)一个
last_response
字段,那么就更容易了,因此您甚至不需要id。如果您使用的是postgresql 9.3+,那么JSON字段类型非常好,否则只需在您的响应上调用来_JSON
,并将其存储在任何文本
字段中,它是一个最后的\u响应
或一个适当的表。这也是我处理API数据的方式。但是,在找出处理表单的最佳方法时遇到了困难
def create
myapiresponse = MyApiResonse.new(myapikey, whatever)
@response = myapiresponse.get
end