Os ajudantes de caminho geram caminhos com pontos em vez de barras

89

Em meu routes.rb eu tenho o seguinte:

resources :message_threads

Quando eu ligo:

message_threads_path(1)

Eu recebo:

/message_threads.1

Por que é isso? Meus outros recursos funcionam bem. Não estou pluralizando isso corretamente ou algo assim?

Ghempton
fonte

Respostas:

142

Sim, é um erro de pluralização.

Ao passar o ID 1, presumo que você deseja exibir um único registro.

Portanto, você precisa usar o singular 'message_thread':

message_thread_path(1)

O que resultará em:

http://localhost:3000/message_threads/1
Scott
fonte
3
Heh. Isso acontece com todos nós; freqüentemente. Provavelmente não será a última vez que você verá esse erro!
Scott,
Estou recebendo esse mesmo erro com uma rota nomeada que criei e não a estou pluralizando. Qual seria a correção aí?
kakubei
1
@kakubei, verifique seu arquivo de rotas. Você está ligando resources :my_modelou resources :my_models? (Você precisa pluralizar no arquivo de rotas.)
JellicleCat
Todas as minhas rotas são pluralizadas.
kakubei
1
Acabei de sair das 5 da tarde, estava prestes a bater minha cabeça no teclado, era isso. Obrigado cara.
Phantomwhale de
19

Às vezes, isso também ocorre quando você não fornece um parâmetro: as em sua rota:

delete "delete/:id" => "home#delete"

Alterado para:

delete "delete/:id" => "home#delete", as: :delete

(ignore o exemplo estranho, apenas aconteceu de ser algo que acabamos de encontrar para um aplicativo interno que estamos construindo)

Jamon Holmgren
fonte
4
Isso funcionou para mim. Especificando : as me deu um nome que eu poderia anexar "_path" para que Rails soubesse o que diabos eu estava pedindo em link_to. Originalmente, quando meu arquivo de rotas tinha: match "/xyz/show/:project_id" => "xyz#show_project", :via => [:get] my view markup: <%= link_to "Show Details", xyz_show_path(@project) %> continuava produzindo: http://localhost:3000/xyz/show.1 Alterando o arquivo de rotas para: match "/xyz/show/:project_id" => "xyz#show_project", :via => [:get], :as => "show" allowed: <%= link_to "Show Details", show_path(@project) %> to work.
Ayang
0

Outras pessoas que pousam aqui podem estar nesta situação:

Se você tiver um recurso singular declarado em seu routes.rb:

resource :map

Você não precisa passar um objeto para map_path. Tentar chamar map_path(map)resultará em comportamento semelhante (ou seja, um URL semelhante map.12).

Techpeace
fonte