Tem namedspaced roteamento mudou em Rails 2.3?
-
05-07-2019 - |
Pergunta
Eu tenho um namespace administrador que me dá as rotas habituais, tais como admin_projects e admin_project, no entanto eles não estão se comportando da maneira usual. Esta é minha primeira Rails 2.3 projeto então talvez relacionadas Não consigo encontrar qualquer informação através do Google no entanto. |
map.namespace(:admin) do |admin|
admin.resources :projects
end
O estranho é para uma determinada URL (por exemplo, / admin / projetos / 1.) Eu não têm de passar em um objeto para obter URL é de alguma forma adivinha-los:
<%= admin_project_path %> # => /admin/projects/1
Não se preocupe, não é realmente um problema apenas não percebeu isso antes.
Mas se eu tentar passar um objeto como é habitual:
<%= admin_project_path(@project) %> # => admin_project_url failed to generate from {:controller=>"admin/projects", :action=>"show", :id=>#<Project id: 1, name: "teamc...>
": id" parece conter o objeto inteiro, então eu tento passar o id diretamente e funciona:
<%= admin_project_path(@project.id) %> # => /admin/projects/1
Isso não seria tão ruim, mas quando se trata de formas Eu costumo usar [: admin, @object], no entanto:
<%= url_for [:admin, @project.id] %> # => undefined method `admin_fixnum_path'
Por isso, não pode passar em um id, como ele precisa de um objetos classe para trabalho fora da rota correta de uso.
<%= url_for [:admin, @project] %> # => Unfortunately this yields the same error as passing a object to admin_project_path, which is what it is calling.
Não consigo detectar eventuais erros e isso é bastante normal, então eu não sei o que está acontecendo de errado ...
Solução
Interessante. O que acontece quando você definir um método to_param
no projeto? Por exemplo
class Project < ActiveRecord::Base
def to_param
self.id
end
end
Este deve ser o padrão e isso não deve ser necessário. Mas o que acontece se você torná-lo explícito? Tente adicionar o método acima, em seguida, volta para a sua abordagem original de só passando em torno @project
indoOutras dicas
Eu gostaria de poder ajudá-lo em um presente. Nós temos um aplicativo grande com várias seções namespaced. As nossas rotas são definidas no método exato que você descreveu e estamos chamando nosso ajudante caminho com objetos. Nenhum onde na aplicação estamos acessando usando o id.
O aplicativo foi iniciado on Rails 2.1 e fez a transição através de 2.2 e 2.3 sem mudanças significativas para o roteamento. Desculpe eu não poderia ser mais ajuda.
Par