In Rails, ist es möglich, Namespace-Modelle in Modulen und immer noch richtiges Verhalten von url_for
?Schienen url_for und namespaced Modelle
Zum Beispiel hier, url_for
funktioniert wie erwartet:
# app/models/user.rb
class User < ActiveRecord::Base
end
# config/routes.rb
resources :users
# app/views/users/index.html.haml
= url_for(@user) # /users/1
Während nach dem User
Modell in ein Modul setzen, url_for
über eine nicht definierte Methode klagt m_user_path
:
# app/models/m/user.rb
module M
class User < ActiveRecord::Base
end
end
# config/routes.rb
resources :users
# app/views/users/index.html.haml
= url_for(@user) # undefined method 'm_users_path'
Ist es möglich, have url_for
ignorieren Sie das Modul in M::User
und geben Sie user_path
für url_for(@user)
statt 0 zurück?
UPDATE
So, nach fast 5 Jahren, hier ist die Lösung, dank esad. Dies wurde in Rails 4.2 getestet.
# app/models/m/user.rb
module M
class User < ActiveRecord::Base
end
end
# app/models/m.rb
module M
def self.use_relative_model_naming?
true
end
def self.table_name_prefix
'm_'
end
end
# config/routes.rb
resources :users
# app/views/users/index.html.haml
= url_for(@user) # /users/1
Hinweis: wenn das Modell zu erzeugen, View und Controller mit bin/rails g scaffold m/user
, die Ansichten und die Steuerung auch Namespaces werden. Sie müssen app/views/m/users
zu app/views/users
und app/controllers/m/users_controller.rb
zu app/controllers/users_controller.rb
verschieben; Sie müssen auch überall Referenzen auf das Modul M
entfernen, außer im Modell M::User
.
Schließlich war das Ziel hier Namespace-Modelle, aber keine Ansichten und Controller. Bei der esads-Lösung wird das Modul M
(mit User
) explizit aufgefordert, nicht in Routen zu erscheinen. Somit ist die M
entfernt und nur User
bleibt übrig.
Das Benutzermodell kann jetzt in residieren, der Benutzer-Controller lebt in app/views/controllers/users_controller.rb
und die Ansichten können in app/views/users
gefunden werden.
Das ist golden! Löse genau das, was der OP verlangte (und was ich suchte) Danke – Ivar
Wenn ich mehr + 1s hier setzen könnte !!!!! Vielen Dank! – eirc
Diese Methode sollte die erste sein, die in Rails API dokumentiert ist! – olhor