1

レンダリング呼び出しのナビゲーションまたは URL 部分がどこで解決されるかを知るために、rails3.2 ソース コードで確認する必要があるメソッドはありますか? その理由は、URLが次の形式の小さなアプリを持っているからです

www.example.com/bob/edit

上記のルートは、編集フォームをレンダリングすることを示唆しています。編集: link_to ヘルパーの応答を変更することで、このルートに到達できました。

def update
  #when validation passes
   redirect_to @user
  #when validation fails
  respond_to do |format|
     format.html {render :action => "edit"}
  end
end

ここで問題になるのは、users_controller の更新アクションへの送信時に検証エラーが発生した場合、URL が次のようになることです。

www.example.com/users/bob/edit

config/routes.rb

get "users/new", to: => "users#new"
resources :users

ご覧のとおり、ルートで興味深いことは何も起きていません。

models/user.rb 内

def to_param
  "#{name}"
end

ビュー/edit.html.erbで

form_for(@user) do |f|
end

観察:ここで、フォームが新たにレンダリングされると、フォームの「アクション」は「users/bob」を指しますが、フォームが再レンダリングされると、検証エラーの「cos」が発生し、フォームのアクションは不思議なことに「users/」に変更されます。 user.rb モデルの to_param を削除すると正常に動作します

それほど大したことではありませんが、レンダリング呼び出しで生成された URL をオーバーライドする必要がある場合、どこを変更すればよいか考えていました?????

探索するための提案や指針は大歓迎です....

4

1 に答える 1

2

取得している URL をどのように取得しているかはわかりませんが、質問に対する一般的な回答は、そうではありません。リクエストを送信した後に表示される URL は、リクエストが送信された (またはリダイレクトされた) URL であり、元のページの URL や、最終的にレンダリングするテンプレートの URL ではありません。あなたの場合、問題は、editページのカスタムURLを作成したもののupdate、.form_for(@user)updatePUT "/users/bob"

これを修正するには、まずカスタムupdateルートを作成します。たぶん次のようなもの:

put ":id/update", to: => "users#update"

次に、form_forその URL を使用します。

form_for(@user, :url => "#{@user.to_param}/update")
于 2012-04-21T13:47:21.617 に答える