【问题标题】:Rails period inside of urlurl中的Rails句点
【发布时间】:2014-08-15 23:49:28
【问题描述】:

我无法删除网址中的句点。我已经查找了其他解决此问题的方法,但其中任何一个都是针对索引操作的。

这是一个网址的样子

/shared_songs.32 #current url structure
/shared_songs/32 #would like this format

这是我的 routes.rb 里面的内容

  get 'shared_songs/:note_id' => "shared_songs#show" #works fine
  get 'shared_songs', to: "shared_songs#index", as: "shared_songs" #/shared_songs.32

在我目前拥有的 index.html.erb 文件中

link_to song.name, shared_songs_path(song)

知道如何解决这个问题吗?

【问题讨论】:

  • /shared_songs/32 应该执行哪个操作?
  • 在浏览索引操作并单击 link_to 链接时,它应该会将您带到正确的歌曲,但它会在 URL 中添加句点而不是 /

标签: ruby-on-rails ruby url routes


【解决方案1】:

发生这种情况的原因是因为您使用的 url 助手在路径中没有任何动态段(:id、:user_id 等),但无论如何您都在给它一个值(歌曲)。不知道还能用它做什么,rails 使用该值作为格式,这就是为什么你最终得到 /shared_songs/32

shared_song_path(song) 不起作用,因为您当前没有名为 shared_song 的路由。正如几位 cmets 所说,到目前为止,最简单的方法是这样做

resources :shared_songs

这将为您提供一个正常运行的shared_songs_path(对于索引,不需要任何参数_和shared_song_path(需要一个参数)。您必须稍微更改您的控制器,因为歌曲的 id 会使用params[:id] 而不是params[:note_id]

【讨论】:

    【解决方案2】:

    代替:

    link_to song.name, shared_songs_path(song)
    

    做:

    link_to song.name, shared_song_path(song)
    

    song,不是songs

    【讨论】:

    • 这样做时我收到错误undefined method shared_song_path
    • as: :shared_song 添加到您的第一条路线
    • 像以前一样工作,因为网址中仍然有一个点。这很奇怪
    • 您的 routes.rb 中还有其他内容吗?另外,我还不是很清楚,您希望 shared_songs/32 映射到索引或显示操作?
    • 在使用resources :shared_songs, :only => [:index, :show] 时,上述内容仅适用于索引操作,但显示操作不起作用。我更改了路由以匹配 url,但 index 操作是唯一一个似乎不起作用的操作,并且通过工作我指的是 link_to 不起作用,因为它在 url 中包含一个句点。
    【解决方案3】:

    如果您以 RESTful 方式定义路由可能会有所帮助:例如 resources :shared_songsAs explained much more clearly in the Rails docs,使用resources helper 会自动为相应的控制器操作设置适当的路由。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-05-12
      • 1970-01-01
      • 2012-02-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多