0

多くの情報を見つけたので、これに少し固執しましたが、どれも機能していないようです。

ユーザーは、クライアント インデックス、またはホーム画面の 2 つの画面のいずれかからクライアントを編集できます。更新により、編集ボタンをクリックした画面に送り返してもらいたいです。

  • 私が最初に見つけた完璧な音は次のとおりです。redirect_to :back
  • 線に沿っているように見えた2番目のことは:request.refererまたはrequest.env['HTTP_REFERER']

これらの「解決策」はどちらも、編集画面を再度ロードするだけで、ユーザーをインデックス画面やホーム画面に戻すことはありませんでした。

これが私の更新定義です:

def update
  @client = Client.find(params[:id])
  if @client.update_attributes(params[:client])
    redirect_to clients_path, notice: "#{@client.name} (#{@client.company}) was successfully updated."
  else
    render action: "edit"
  end
end

私は何を間違っていますか?

4

1 に答える 1

0

ついにこれのこの底に到達しました。

:back期待どおりに機能していました。request.refererたとえば、編集フォームからコントローラーに渡す場合、もちろん編集フォームはリファラーでした。そのため、参照URLを保持するフォームに非表示フィールドを設定する必要がありました。

私はこれを私のフォームに部分的に追加しました:<%= hidden_field_tag :referrer, request.referer %>

使用hidden_field_tagしたので、referrerという変数がありましたが、モデル名などに基づいた単純なフォームで作成された配列には必要ありませんでした。

次に、コントローラーに追加redirect_to params[:referrer]して出来上がり!、すべてが扱います。

これで、ホームページにある編集ボタンをクリックできます。保存すると、ホームページに戻ります。または、インデックスページの編集ボタンをクリックすると、そこに戻ります。簡単です。

注意-セキュリティに関する軽微な懸念。隠しフィールドタグで変数を送信してから、コントローラー内でその変数を解釈することになります。たとえば、リファラー値1はホームページに移動し、値2はインデックスに移動します。2つの選択肢は明示的に設定するパスであるため、これはより「安全」であると思います。後で並べ替えて、必要に応じて更新します。

于 2013-03-02T03:54:49.367 に答える