1

ルートを正しく設定する方法がわかりません。

私のアプリには、サイト所有者が住所情報を更新できるビューがあります。newアクションとcreateアクションはサインアップ プロセスの一部であり、signups_controller. 編集および更新アクションは にありますsettings_controller

ユーザーが設定エリアに入ると、編集フォームのみが表示されます。入力すると、ユーザーは同じフォームに戻り、フラッシュ メッセージまたはエラー メッセージが表示されます。 コントローラは次のようになります。

class SettingsController < ApplicationController

  def edit
    @account = current_account
    @account.companies.first
    @account.companies.first.addresses.first
    @account.companies.first.phones.first
  end

  def update
    @account = current_account
    if @account.update_attributes(params[:account])
      redirect_to edit_setting_path
      flash[:notice] = "Success!"
    else
      render :edit
    end
  end
end

私のルートでは、単純に次のとおりです。

resources :settings

サイトのこの領域へのリンクは、基本的な RESTful という名前の linke であり、パラメーター オプションがあります。

edit_setting_path(:id => current_account.id)

ユーザーがこのページに到達すると、次の URL が表示されます。

http://domainname.com/settings/1/edit

フォームを送信してエラーが発生すると、URL は次のように変わります。

http://domainname.com/settings/1

URL が変更されるのはなぜですか? 最初の編集ビューと同じままにする方法はありますか? 失敗した更新でリダイレクトを試みましたが、エラー メッセージが表示されません。

何か案は?

4

2 に答える 2

1

「なぜ」の質問に答えるには:失敗したリクエストのURLを反映しているため、URLが変更されています。この場合は、そのURL(/ settings / 1)へのPUTリクエストです。フォームを送信しました。そのフォームの送信は(正しく)そのURLを指します。これは、ヘルパーが提供するRESTfulルートの結果です。アクションのロジックはrender:actionにフォールスルーするため、リダイレクトはなく、フォームはこのアクションで使用可能な同じデータを使用してページ上で再レンダリングするだけです(これがエラーを確認できる理由です)。

編集ページにリダイレクトする場合は、はい。リダイレクトによってアカウントがリセット(再クエリ)されるため、@accountインスタンス変数に設定されているエラーは失われます。

PUTに一致するルートを/settings/ 1 / editに追加し、それを更新アクションにポイントして、フォームなどを変更することができます。要するに、これはお勧めしませんが、機能するはずです。

完全にテストされていませんが、試行可能です:

ルート.rb

 put "/settings/:id/edit", :to=>"settings#update", :as=>"update_setting"
 resources :settings, :except=>:update

フォームはupdate_setting_pathにも送信する必要があります(これは、新しいオブジェクトに再利用できないことも意味します... ew)

于 2012-04-18T17:39:50.520 に答える
0

最初にThe Rails Guides for Routingを読んでください。なぜそのように機能するのかを理解するのに大いに役立ちます。

第二に、あなたがやろうとしていることを達成するには、match通話を介して手動ルートを追加する必要があります. このようなものが必要になります。

match '/settings/:id/edit' => "settings#edit"
于 2012-04-18T16:47:12.443 に答える