【问题标题】:Referencing Model with String input使用字符串输入引用模型
【发布时间】:2012-02-27 09:37:01
【问题描述】:

假设我希望创建一个可以使用 type(string) 和 id(int) 查询所需对象的页面。

/query?type=people&id=1

会来接我

Person.find(1)

/query?type=cities&id=123

会来接我

City.find(123)

但是,我对如何将字符串转换为所需的模型类有疑问。

我能想到的唯一方法是

case params[:type]
 when 'people'
  @object = Person.find(params[:id])
 when 'cities'
  @object = City.find(params[:id])
end

但是,如果我有更多类型的模型,这种方法会很成问题。

有没有更好的办法?

提前谢谢你,

【问题讨论】:

  • 如果您尝试自动执行此操作,您最终可能会遇到攻击者可以发送“/query?type=TOP_SECRET_TABLE&id=1”并获取不应被允许访问的信息的情况。小心你的愿望。
  • 它实际上是用于标记对象的ajax。所以我的下一步就像@object.tags

标签: ruby-on-rails ruby


【解决方案1】:

试试:

klass = params[:type]
klass.singularize.classify.constantize.find(params[:id])

编辑:

@object = params[:type].singularize.classify.constantize.find(params[:id])

【讨论】:

猜你喜欢
  • 2015-06-18
  • 2020-12-11
  • 2015-01-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-02
相关资源
最近更新 更多