【问题标题】:Friendly URLs in Rails 3Rails 3 中的友好 URL
【发布时间】:2011-05-08 09:09:59
【问题描述】:

我当前的应用正在使用以下网址:

/philsturgeon /philsturgeon/trip_slug

我在我的模型中为用户附加了行程,如下所示:

class Trip < ActiveRecord::Base
    belongs_to :user

    def to_param
        "#{user.username}-#{slug}"
    end
end

现在有人告诉我 to_param 这似乎很棒。这意味着我可以使用正常的资源链接:

<h4><%= link_to trip.name, trip %></h4>

而不是像这样手动创建字符串:

redirect_to('/' + current_user.username + '/' + @trip.slug)

问题是给我一个连字符(或破折号)分隔的 URL。一旦我将 URL to_param 更改为 #{user.username}/#{slug}(注意斜线而不是破折号),我就会收到错误消息:

ActionController::RoutingError 中 主页#index

显示 /Users/phil/Scripts/ruby/travlr/app/views/home/index.html.erb 提出第 27 行的位置:

没有路线匹配 {:action=>"destroy", :controller=>"trips", :id=>#}

提取的源代码(第 27 行附近):

24: 25: 26: 27: 28: 29:30:
用户:

【问题讨论】:

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


    【解决方案1】:

    您需要将/ 转义为%2F。所以你应该有...

    def to_param
        "#{user.username}%2F#{slug}"
    end
    

    【讨论】:

    • 实际上你应该逃避整个事情:"#{user.username}-#{slug}".to_s.gsub(/[ ]/, '-')
    • 添加以下 URL:/trips/philsturgeon%2Famerica-2012 我需要链接到 /philsturgeon/america-2012
    【解决方案2】:

    看起来硬编码 URI 是这种情况下唯一真正的解决方案。工作正常,但不是最好的代码。

    感谢那些回答的人,但他们并不完全正确。

    【讨论】:

      【解决方案3】:

      发生这种情况是因为“/”在引用 URL 时具有特殊含义。假设您在 /Home/user/my-file 中有一个文件,并且您尝试使用 file://Home/user/my/file 访问它

      这基本上就是你想要做的。如果您希望“文件”在“我的”中,则需要将其存储在其中。对于 Rails,您需要创建一个 nested resource

      【讨论】:

      • 嘿,我不确定这与 webroot 中的应用程序站点有什么关系,并且始终有效。我的 URL 目前工作正常,我只想用“Rails 方式”来做。
      • 你需要添加路由到 routes.rb 来做你想做的事。
      • 是的,我的路线已经完成,并且工作正常。我需要链接回该路由页面。
      猜你喜欢
      • 2011-06-27
      • 1970-01-01
      • 2011-10-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-11
      • 2011-05-04
      • 1970-01-01
      相关资源
      最近更新 更多