如何使用在轨道路线生成一个动态的属性?(How can I use a dynamic attrib

2019-10-21 18:54发布

在我的模型我有这样的自定义的方法:

def encoded_id
    "foo#{self.id.to_s}"
end

现在,在调用mymodel_path(myobject)我想方法mymodel_path接收encoded_id作为属性信息的一部分(例如, {id: 123, bar: 'bar', encoded_id: 'foo123'}

这怎么可能, 而无需指定它在方法调用本身实现?

Answer 1:

寻找类似http://apidock.com/rails/ActiveRecord/Base/to_param

在这两个小时,你可以重写to_param方法在你的模型,如:

def to_param
  # some other value
end

Basicaly当你通过对象的网址助手的叫法。 助手称.to_param型号,并将其传递到生成的网址参数



Answer 2:

您应该创建,这是否给你一个辅助方法。

您例如: mymodel_path(myobject) ,辅助mymodel_path()不是模型方法,而是一个url帮手。 如果你不喜欢它的功能,你应该写另一个URL帮手。

def my_model_path_with_encoded_thing(model)
  mymodel_path({
    id: model.id, 
    bar: model.bar, 
    encoded_id: model.encoded_id
  }) if model.persisted?
end

如果你真的想留在mymodel_path(object)你可以使用参数混乱,但它会打破嵌套的路线,并试图正常PARAMS传递给url帮手:

def to_param
  "#{self.id}?foo=#{self.foo}&encoded_id=#{self.encoded_id}"
end


文章来源: How can I use a dynamic attribute for route generation in rails?