11

私はルートを理解するのに本当に苦労しています。誰かが私を助けてくれることを願っています。

これが私のカスタムコントローラーです

class SettingsController < ApplicationController
  before_filter :authenticate_user!

    def edit
      @user = current_user
    end

    def update
      @user = User.find(current_user.id)
      if @user.update_attributes(params[:user])
        # Sign in the user bypassing validation in case his password changed
        sign_in @user, :bypass => true
        redirect_to root_path
      else
        render "edit"
      end
    end
end

そして私はファイルsettings/edit.html.erbと私のリンクを持っています

<li><%= link_to('Settings', edit_settings_path) %></li>

ルート

get "settings/edit"

これではうまくいきません。

undefined local variable or method `edit_settings_path' for #<#<Class:0x00000001814ad8>:0x00000002b40a80>

これにはどのようなルートが必要ですか?私はそれを理解することはできません。パスの代わりに「/settings/ edit」を入力すると、リソース名が設定/編集の前に配置されるため、他のリソースページに移動するとすぐに混乱します。

どうも

4

2 に答える 2

22

次のことを行う必要があります。

get 'settings/edit' => 'settings#edit', :as => :edit_settings
# you can change put to post as you see fit
put 'settings/edit' => 'settings#update'

リンクで直接使用する場合は/settings/edit、パスの前に他のリソース名が追加されても問題はありません。ただし、先頭のスラッシュがないと、つまり、settings/editその問題が発生する可能性があります。

edit_settings_path名前付きルートを宣言しなかったことが原因である可能性があります。オプションを使用:asして、このパス/URLを生成する方法を定義する必要があります。

于 2012-06-17T13:17:27.927 に答える
5

ルートを明示的に定義する場合は、次のようなものを使用します

get 'settings/edit' => 'settings#edit', :as => edit_settings

このステートメントは、設定/編集のためのGET要求を受信したときに、SettingsController#editメソッドを呼び出し、ビューが「edit_settings_path」を使用してこのリンクを参照できることを定義します。

ルーティングに関するRailsガイドをお読みください。それはそこにある他のどの参照よりもルーティングをよりよく説明します。

またrake routes、アプリケーションで定義されているすべてのルートの詳細を一覧表示するタスクにも注意してください。

于 2012-06-17T13:21:04.783 に答える