我正在开发一个包含多个部分和开发人员的项目。我们使用 mongodb 并因此在模型中声明 db 的东西。尽管项目有几个独立的服务器,但只有一个数据库,我们将模型存储在一个公共目录和一个 gem 中。
这意味着我们有一个模型的命名空间,public_models
为了避免像 /public_models/users/... 这样的路线,我声明了以下路线:
scope :module => "public_models" do
resources :users
end
这在许多情况下都有效,并且会产生人们期望的麻烦。
users GET /users(.:format) public_models/users#index
POST /users(.:format) public_models/users#create
new_user GET /users/new(.:format) public_models/users#new
edit_user GET /users/:id/edit(.:format) public_models/users#edit
user GET /users/:id(.:format) public_models/users#show
PUT /users/:id(.:format) public_models/users#update
DELETE /users/:id(.:format) public_models/users#destroy
但是,我必须更改几个链接才能使其正常工作。index.html.erb
link_to 'Show', user_path(user) instead of link_to 'Show', user
form_for 我必须指定网址。如果我指定问题:
form_for @user, :url => user_path(:id => @user) do |f|
然后更新工作,但不是新的我得到“没有路线匹配[POST]”/user/287944764774”如果我把它改成
form_for @user, :url => users_path(@user) do |f|
然后新的作品就像一个魅力,但我得到这个更新错误
"No route matches [PUT] "/user.287944764774"
更不用说我需要使用的 redirect_to 了:
redirect_to user_path(:id => @user.id)
这一切都非常令人困惑和奇怪!我的意思是这不可能是第一次有人想要将模型存储在另一个地方。它真的必须销毁所有表单助手等吗?这样做的正确方法是什么???