【问题标题】:Rails 4 routing error and record not found using friendly_idRails 4 路由错误和使用friendly_id 找不到记录
【发布时间】:2015-03-20 08:11:28
【问题描述】:

当我去 localhost:3000/levels/blah-blah-blah-blah.stuff-stuff

它给了我一个 ActiveRecord::RecordNotFound 错误。

我检查了参数哈希,它给出了这个:

{"action"=>"show", "controller"=>"levels", "id"=>"blah-blah-blah-blah", "format"=>"stuff-stuff"}

在 routes.rb 中:

resources :levels, only: [:index, :show]

match '*levels' => 'levels#show', :format => false, :via => :get

我尝试了这个而不是匹配,但它也不起作用:

get "/levels/:id", to: "levels#show", :format => false

【问题讨论】:

  • 保持原来的路线。
  • 嘿,当我离开我的路线时,SSR 给出了同样的错误。

标签: ruby-on-rails-4 friendly-id


【解决方案1】:

找到这一行

@level = Level.find(params[:id])

替换为

@level = Level.friendly.find(params[:id])

因为友好的 ID 可以理解您获取记录的 url 方法。

在你的model/level.rb里面应该可以使用。

extend FriendlyId
friendly_id :name, use: :slugged

【讨论】:

  • 问题是参数是 {"action"=>"show", "controller"=>"levels", "id"=>"blah-blah-blah-blah", " format"=>"stuff-stuff"} 而不是 {"action"=>"show", "controller"=>"levels", "id"=>"blah-blah-blah-blah.stuff-stuff", "格式"=>""}
【解决方案2】:

我最终这样做是为了获取网址中的句点。 Rails 4 在路由中没有与 :format => false 合作。

def set_level
  # hack to get period in the url
  @level = Level.friendly.find(params[:id] + "." + params[:format])
end

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-03
    • 1970-01-01
    • 1970-01-01
    • 2017-07-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多