我正在开发一个包含多个零件和开发人员的项目。我们使用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)
这一切都非常令人困惑和奇怪!我的意思是它不是第一次有人想要将模型存储在另一个地方。它是否真的必须摧毁所有形式的助手等。这样做的正确方法是什么?
答案 0 :(得分:0)
在深入潜水之前,我可以请你试试吗
link_to 'Show', [:public_models, user]
并且,在一个新的虚拟项目中,类似
rails g scaffold 'PublicModels::User' name:string
我不确定这些是否是您问题的确切答案,但我认为他们可以提供一些有关正在发生的事情的线索。
修改
关于表单提交,正如您从路径输出中看到的,post url(new)的路径是
users_path
但是对于put url(编辑)是
user_path(@user)
所以你可以试试像
这样的东西:url => (@user.new_record? ? users_path : user_path(@user))
或者只是将两个表单分开并处理不同代码块中的url / method参数