在我的模型我有这样的自定义的方法:
def encoded_id
"foo#{self.id.to_s}"
end
现在,在调用mymodel_path(myobject)
我想方法mymodel_path接收encoded_id作为属性信息的一部分(例如, {id: 123, bar: 'bar', encoded_id: 'foo123'}
这怎么可能, 而无需指定它在方法调用本身实现?
在我的模型我有这样的自定义的方法:
def encoded_id
"foo#{self.id.to_s}"
end
现在,在调用mymodel_path(myobject)
我想方法mymodel_path接收encoded_id作为属性信息的一部分(例如, {id: 123, bar: 'bar', encoded_id: 'foo123'}
这怎么可能, 而无需指定它在方法调用本身实现?
寻找类似http://apidock.com/rails/ActiveRecord/Base/to_param
在这两个小时,你可以重写to_param
方法在你的模型,如:
def to_param
# some other value
end
Basicaly当你通过对象的网址助手的叫法。 助手称.to_param型号,并将其传递到生成的网址参数
您应该创建,这是否给你一个辅助方法。
您例如: 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