【问题标题】:Forcing Lowercase URL Parameters in Rails在 Rails 中强制使用小写 URL 参数
【发布时间】:2012-08-01 21:09:33
【问题描述】:

我正在 Rails 3.2 中开发一个应用程序,它使用 to_params 将 URL/路由更改为自定义的。

模型中的to_params 是这样的:

def to_params
  keyword
end

然后,在控制器中,我使用以下方法查找对象:

def show
  @object = Object.find_by_keyword(params[:id])
end

我在模型中还有一个before_save,它确保所有keyword 条目都是小写的,所以URL 像http://mydomain.com/object/keyword 一样出现。

我的问题是……有些用户在自己将关键字或其他内容放入 URL 时可能会想将其大写。在尝试在控制器中查找对象之前,如何将该 URL 转换为小写?我试过@object = Object.find_by_keyword(params[:id].lowercase),但似乎没有用。

任何帮助将不胜感激!

【问题讨论】:

  • 你的模型被称为“对象”还是只是一个例子? Ruby 已经有“Object”类,它是 Ruby 中几乎所有其他对象的超类,所以这可能会产生误导。
  • -1 用于缺少值的示例或有助于解决问题的更多详细信息。
  • 好的,您还需要什么其他详细信息?我仍在寻找问题的答案。如果我可以 -1 评论,我会感谢您没有指定您想要的详细信息!?
  • 你确定它是一个字符串对象(记录它的#class 属性),你确定它周围没有任何空格(log ">>#{params[:id]}

标签: ruby-on-rails ruby-on-rails-3 ruby-on-rails-3.2


【解决方案1】:

@object = Object.find_by_keyword(params[:id].downcase)

应该有效

【讨论】:

  • 感谢您的回复。我已经尝试过了(如我的问题中所述),但它不起作用。在第一次 @object 调用后,该对象未返回,页面出错。
  • 您使用的是lowercase。 ruby 中的方法是downcase.
  • 糟糕,我没有意识到我上面说的是lowercase!漫长的一天......但我的意思是downcase,试过了,但它不起作用。第一个对象调用为 nil 时出现相同的错误。
  • @Justin 你确定你有你在params[:id] 中的想法吗?您能否为我们发布一些带有小写关键字然后大写的请求的日志?
  • 您真的应该在某处记录params[:id]params[:id].downcase 的值。然后在rails console中查询params[:id].downcase的内容
猜你喜欢
  • 1970-01-01
  • 2011-02-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多