2

私はいくつかの部分と開発者とのプロジェクトに取り組んでいます。mongodb を使用するため、モデルで db を宣言します。プロジェクトには複数の個別のサーバーがありますが、データベースを 1 つだけにするために、モデルを共通のディレクトリと 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 URL を指定する必要があります。私が指定した場合の問題:

form_for @user, :url => user_path(:id => @user) do |f|

その後、更新は機能しますが、新しいものではありません

form_for @user, :url => users_path(@user) do |f|

その後、新しい作品は魅力のように機能しますが、更新時にこのエラーが発生します

"No route matches [PUT] "/user.287944764774"

使用する必要がある redirect_to は言うまでもありません。

redirect_to user_path(:id => @user.id)

これはすべて非常に紛らわしく、奇妙です!モデルを別の場所に保存したいという人は初めてではありません。本当にすべてのフォームヘルパーなどを破棄する必要がありますか?これを行う適切な方法は何ですか?

4

1 に答える 1

0

私は以前、この問題で多くの問題を抱えていました。理解するのが難しい主な理由は、単純なモデルで使用すると、form_for とヘルパーへのリンクが多くの作業を行っていることです。

深く掘り下げる前に、お試しいただけますか

link_to 'Show', [:public_models, user]

また、新しいダミープロジェクトでは、次のようなものです

rails g scaffold 'PublicModels::User' name:string

これらがあなたの問題に対する正確な答えであるかどうかはわかりませんが、何が起こっているのかについての手がかりを与えることができると思います.

編集

フォーム送信については、ルート出力からわかるように、投稿URL(新規)のパスは

users_path

しかし、put url (編集) の場合は

user_path(@user)

だからあなたは何かを試すことができます

:url => (@user.new_record? ? users_path : user_path(@user))

または、2 つのフォームを分離し、異なるコード ブロックで URL/メソッド パラメータを処理するだけです

于 2012-07-04T18:26:46.580 に答える