Ruby on rails Ruby on Rails中带连字符的字段参数

Ruby on rails Ruby on Rails中带连字符的字段参数,ruby-on-rails,Ruby On Rails,Rails采用大小写或下划线命名约定,这是给定的 但是,如果存储在Rails应用程序中的数据具有不同的命名约定,该怎么办 例如,第三方API可能会将一些参数返回为“fieldId”,但也返回为“fieldId” 对于像“fieldid”这样的参数,如何在Rails中设计MVC来适应这种情况?如果资源名为'field_id',Rails只需忽略参数'field id',数据就不会保存-从安全角度来看这是件好事,但业务问题仍然存在 有什么想法吗?您可以在ActiveRecord中自定义字段名。如果您

Rails采用大小写或下划线命名约定,这是给定的

但是,如果存储在Rails应用程序中的数据具有不同的命名约定,该怎么办

例如,第三方API可能会将一些参数返回为“fieldId”,但也返回为“fieldId”

对于像“fieldid”这样的参数,如何在Rails中设计MVC来适应这种情况?如果资源名为'field_id',Rails只需忽略参数'field id',数据就不会保存-从安全角度来看这是件好事,但业务问题仍然存在


有什么想法吗?

您可以在ActiveRecord中自定义字段名。如果您想忽略rails的默认约定,并想应用自己的约定,下面是如何配置它: 例如:

class Project < ActiveRecord::Base
  self.primary_key = 'sysid'
end
class项目
现在这里,
projects
表的主键是
sysid
,而不是
id

下面是有关
ActiveRecord
class方法
primary\u key

第三方系统不符合您自己的内部结构是很正常的。你可以尝试改变你自己的结构,但通常应该只构建一些在外部结构和内部结构之间转换的东西。 这种情况非常普遍,因此有几种模式,例如:


如果您想要一些更具体的建议,您需要自己更具体,这个API是什么,您如何访问它。如果您谈论的是HTTP Post参数,那么您只需编写一个方法,该方法将一个哈希作为输入,并输出另一个具有不同密钥名的哈希。

Hi Meyer,您已经捕获了所讨论的场景。参数通过HTTP Post发送。参数散列的格式是{“to”=>“1234565”,“from”=>“543216”,“text”=>“test a”,“keyword”=>“mo”,“status”=>“0”,“call id”=>“45”,“call price”=>“0.0.067”},我必须将“call id”和“call price”键分别转换为“call_id”和“call_price”。因为我也确信这是一种设计模式,但我仍然没有找到一个被广泛推荐的方法来实现这一点。根据您的评论,一个更好的问题是如何优雅地修改params散列键为了修改params散列中的键,可以使用这些行中的一些内容也许?p=>{“至”=>“1234565”,“自”=>“543216”,“文本”=>“测试a”,“关键字”=>“mo”,“状态”=>“0”,“呼叫id”=>“45”,“呼叫价格”=>“0.0.067”}>@Meyer该问题通过方法和过滤器解决,如下所示:
before_action:transform
def transform#将带连字符的参数转换为带下划线的参数。参数。深_变换_键!{| key | key.tr('-',''''')}end
Hi Anand,谢谢你的回答,我认为@Meier's更接近上述场景,问题不是关于主键的。我同意你的看法:-)