레일스에서 모델의 모델을 네임 스페이스로 모델링 할 수 있습니까? url_for
에서 올바른 동작을 얻으시겠습니까?레일 url_for 및 namespaced 모델
는 예를 들어, 여기, url_for
작품은 예상대로 : 모듈에 User
모델을 가하고 후, url_for
정의되지 않은 방법 m_user_path
에 대해 불평 반면
# 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
:
# 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'
그것을 할 수 있습니다 url_for
모듈을 M::User
에서 무시하고 url_for(@user)
의 경우 0 대신에 user_path
을 반환하십시오.?
UPDATE는
그래서, 이후 거의 오년, 여기, ESAD에 감사 솔루션입니다. 이것은 Rails 4.2에서 테스트되었습니다.
# 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
참고로 bin/rails g scaffold m/user
모델 뷰 및 제어를 생성 할 때, 뷰 컨트롤러도 네임 스페이스한다. app/views/m/users
을 app/views/users
으로, app/controllers/m/users_controller.rb
을 app/controllers/users_controller.rb
으로 이동해야합니다. 모델 M::User
을 제외한 모든 곳의 모듈 M
에 대한 참조를 제거해야합니다.
마지막으로 목표는 네임 스페이스 모델이지만보기 및 컨트롤러는 아닙니다. esads 솔루션을 사용하면 M
(User
포함) 모듈이 경로에 표시되지 않도록 명시 적으로 말합니다. 따라서, 실질적으로 M
은 제거되고 User
만 남습니다.
사용자 모델은 이제 app/views/models/m/user.rb
에 있고 사용자 컨트롤러는 app/views/controllers/users_controller.rb
에 있으며보기는 app/views/users
에 있습니다.
이것은 황금! OP가 묻고있는 것을 정확히 해결합니다. (그리고 내가 뭘 찾고 있었습니까?) 감사합니다. – Ivar
여기에 +1을 더 넣을 수 있다면 !!!!! 고맙습니다! – eirc
이 메소드는 Rails API에서 문서화 된 첫 번째 메소드 여야합니다! – olhor