代码之家  ›  专栏  ›  技术社区  ›  TK.

人类可读的URL在rubyonrails中引起了一个问题

  •  2
  • TK.  · 技术社区  · 15 年前

    我有一个“公司”模式的基本积垢。为了让公司的名字出现,我做到了

    def to_param
      name.parameterize
    end
    

    然后我访问了 http://localhost:3000/companies/american-express 它运行 show 公司财务总监的行动。

    显示 方法如下:

    def show
      @company = Company.find_by_id(params[:id])
    end
    

    params[:id] american-express . 此字符串未存储在任何位置。

    保存记录时是否需要将短字符串(即“american express”)存储在数据库中?或者,有没有任何方法可以在不将字符串保存在数据库中的情况下检索公司数据?

    5 回复  |  直到 15 年前
        1
  •  3
  •   Björn    15 年前

    发送带有参数化值的ID;

    def to_param
        new_record? ? super : "#{id}-#{name}"
    end
    

    在show方法中采集数据时,可以使用整个参数;

    def show
        @company = Company.find("12-american-express"); // equals to find(12)
    end
    

    here

        2
  •  2
  •   Filip    15 年前

    我想 friendly_id 更实用。

        3
  •  0
  •   John Topley    15 年前

    我做了一些类似的事情 Category parameterize 方法对公司名称所做的操作是用破折号替换空格字符,然后您可以简单地执行相反的操作:

    def show
      @company = Company.find_by_name(params[:id].gsub(/-/, ' '))
    end
    
        4
  •  0
  •   sameera207    15 年前

    试试permalink\u-fu插件,它可以在rails中创建SEO友好的URL

    http://github.com/technoweenie/permalink_fu

    干杯

    萨米拉

        5
  •  0
  •   Tanel Suurhans    15 年前

    我建议 friendly_id 宝石也是。 它使您可以灵活地使用permalink slug,也可以剥离音调符号,转换为完整的ASCII等。

    哦,我有没有提到永久链接也有版本控制,所以你可以将旧的过时永久链接重定向到当前的永久链接?:)