在我的模型中,我有这种自定义方法:
def encoded_id
"foo#{self.id.to_s}"
end
现在,在调用mymodel_path(myobject)
时,我希望方法mymodel_path接收encoded_id作为属性的一部分(例如。{id: 123, bar: 'bar', encoded_id: 'foo123'}
)。
如何实现,不必在方法调用本身上指定它?
答案 0 :(得分:1)
查找http://apidock.com/rails/ActiveRecord/Base/to_param
之类的内容如下所示,您可以在模型中覆盖to_param
方法,例如:
def to_param
# some other value
end
当您将对象传递给url helper时,会调用它。 Helper在模型上调用.to_param并将其传递给生成的url params
答案 1 :(得分:0)
您应该创建一个帮助您执行此操作的辅助方法。
对于您的示例:mymodel_path(myobject)
,帮助程序mymodel_path()
不是模型方法,而是url帮助程序。如果你不喜欢它的功能,你应该写另一个url helper。
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 helper:
def to_param
"#{self.id}?foo=#{self.foo}&encoded_id=#{self.encoded_id}"
end