1

ユーザーと設定モデルの間にhas_oneの関連付けがあります。編集および更新アクションを備えたSettingsControllerもあります。フロントページには、設定を編集するためのリンクがあります。

<%= link_to (settings_path(current_user.setting)), do %>
..
<% end %>

これにより、ActionController :: RoutingErrorが発生します。フロントページを表示しようとすると、{:controller => "settings"、:action =>"edit"}..に一致するルートがありません。

なぜこれが起こっているのか、頭をぶつけて立ち往生しました。ユーザー認証にDeviseを使用する場合、このcurrent_userはグローバル変数である必要があります。

ルートがroutes.rbでどのように定義されているかを次に示します。

  resources :setting, :only => [:edit, :update]  
  match '/settings/:id' => "settings#edit", :controller => :setting, :as => :settings

レーキルートが返すものは次のとおりです。

    edit_setting GET    /setting/:id/edit(.:format)                 {:action=>"edit", :controller=>"setting"}
         setting PUT    /setting/:id(.:format)                      {:action=>"update", :controller=>"setting"}
        settings        /settings/:id(.:format)                     {:controller=>"settings", :action=>"edit"}

もう1つの推測は、has_oneアソシエーションを使用する場合、コントローラー名(SettingsController)は複数形ではなく、単数形である必要があるということです。奇妙な理由で、Railsは非常に存在しているにもかかわらず、私のコントローラーに気づいていません。

ヘルプをいただければ幸いです。

4

4 に答える 4

2

名前を複数形で試してください:どこでも設定。

<%= link_to (settings_path(current_user.settings)), do %>
...

match '/settings/:id' => "settings#edit", :controller => :settings, :as => :settings
...

Railsは、複数のモデルに自動的に名前を付けます。あなたの例では、複数形と単数形の名前の奇妙な組み合わせがあります。それをチェックしてください。すべて複数形である必要があります。

于 2011-07-08T20:34:19.167 に答える
1

わかりました、最初に、ユーザーの設定にデバイスではなく独自のコントローラーを使用するのはなぜですか? それはオンです edit_user_registration_path

  • あなたのパスは大丈夫です。:asパラメーターで定義したため、複数形にする必要があります

別のコメントは、resources :setting, :only => [:edit, :update] 次の行を使用している場合、なぜ次の行を使用しているのですか? そしてそのパス、つまり、そのように宣言する場合、次を使用できますedit_setting_path(id)

于 2011-07-08T20:27:45.867 に答える
0

ああ、これの根本的な問題を見つけました。ありがとう、みんな、あなたは私にいくつかのアイデアをくれました。問題は、設定モデルの使用を開始するためにユーザー モデルを移行していたことであり、使用していたユーザーには設定がありませんでした (レール コンソールで作成し、すべて正常に見えたので、これはちょっと奇妙でした)。そのため、設定オブジェクトは nil であり、昨日はレールを狂わせていました。初めてあらゆる種類のエラーを見ました。

はい、has_one アソシエーションを使用しているため、設定のリソース ルートは特異である必要があります。routes.rb の 2 行目では、 .../settings のようなより単純な URL を使用して、ユーザーのすべての設定を取得しようとしていました。

Deviseのedit_user_registration_pathも使ってみたのですが、前回はうまくいきませんでした。おそらく、もう一度考えなければならないでしょう。

みんなありがとう!

于 2011-07-09T11:44:54.593 に答える
-1

link_to メソッドの呼び出しで、settings_path ではなく、setting_path (単数形) を使用してみてください。

<%= link_to (setting_path(current_user.setting)), do %>
于 2011-07-08T20:37:48.673 に答える