我正在撰写多 *** 作符定价API.基本上在我的价格控制器中,我可以访问以下参数params [:carrIEr],params [:address_from],params [:address_to],params [:container_type]等.我有一个验证库,一个合规库和一个价格-finder库,每个处理一个params的子集.
在.NET中,params将被包含在数据传输对象(DTO)或契约中.在调用任何库之前,它们将被转换为域对象(DO),并且每个库都可以在DO上工作,从而避免在DTO上紧密耦合. Ruby编程推荐使用’duck tyPing’,因此我的库可以直接在params上工作(即使你会访问符号而不是对象/属性).或者我应该将我的params编组到一个PriceRequest对象中并使我的库在PriceRequest类型上工作?
选项1:
class PricesController < ApplicationController def get CarrIErValIDator.valIDate(params) ... endendclass CarrIErValIDator def self.valIDate(params) raise CarrIErError if !CarrIEr.find_by_name(params[:carrIEr_name]).exists? endend
选项2:
class PricesController < ApplicationController def get pricesRequest = PricesRequest.new(carrIEr_name: params[:carrIEr_name],...) pricesRequest.valIDate ... endendclass PriceRequest attr_accessor : ... def initalize ... end def valIDate CarrIErValIDator.valIDate(self.carrIEr_name) endendclass CarrIErValIDator def self.valIDate(carrIEr_name) raise CarrIErError if !CarrIEr.find_by_name(carrIEr_name).exists? endend
TIA,
Ĵ
基本上,您希望能够在控制器中执行Rails-y *** 作,例如:
def get price_request = PriceRequest.new(params[:price_request]) if price_request.valID? # do something like redirect or render else # do something else endend
所以你要声明:
class PriceRequest include ActiveModel::Model attr_accessor :carrIEr,:address_from,:address_to,:container_type valIDates :carrIEr,presence: true valIDate :valIDate_address_from def valIDate_address_from # do something with errors.add end # and so on
这是一个很好的起点:http://edgeguides.rubyonrails.org/active_model_basics.html
API中的更多细节:http://api.rubyonrails.org/classes/ActiveModel/Model.html
希望能指出你正确的方向……
总结以上是内存溢出为你收集整理的ruby-on-rails – 跨多个(逻辑)层传递对象的’Rails方式’是什么?全部内容,希望文章能够帮你解决ruby-on-rails – 跨多个(逻辑)层传递对象的’Rails方式’是什么?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)