2011-07-08 12 views
1

私はユーザーと設定モデルの間にhas_oneの関連付けを持っています。私はまた、編集アクションと更新アクションを持つSettingsControllerを持っています。しようとして..whenRails:ルートが一致しません{:controller => "settings"、:action => "edit"}

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

この原因ActionController :: RoutingError Noルートマッチ{::アクション=> "編集":コントローラ=> "設定"、}フロントページに私は設定を編集するためのリンクを持っていますフロントページを表示する。

なぜこのようなことが起こっているのか、頭がいっぱいです。ユーザー認証にDeviseを使用する場合、このcurrent_userはグローバル変数でなければなりません。ここで

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"} 

もう一つの推測では、コントローラ名(SettingsController)は単数形でなければならないことで、ここで

はルートがroutes.rbをで定義されている方法ですhas_one関連付けを使用するときは複数ではありません。奇妙な理由のために、Railsはコントローラが存在するにもかかわらず、コントローラに気づいていません。

お手数ですが、

+0

あなたのモデルコードは – eveevans

答えて

1

なぜ、あなたは自分のコントローラを使用して、ユーザーの設定に使用するのですか?それは大丈夫だedit_user_registration_path

  • あなたのパス上にある は、それはあなたが

もう一つのコメントがある:asパラメータでそれを定義したので、あなたは、なぜあなたが使用しているresources :setting, :only => [:edit, :update] を使用している場合は、複数でなければなりません次の行ですか?あなたがそれを宣言すれば、あなたはそれを使うことができます。edit_setting_path(id)

2

複数の名前で試してみてください。

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

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

複数のモデルで自動的に名前を付けます。あなたの例では、複数形と単数形の名前の奇妙な組み合わせがあります。すべては複数でなければなりません。

+0

+1としてください。 'resources:settings::only:= [:edit、:update]'のように 'resources:setting::only => [:edit、:update]'を複数形に変更することもできます。私はそれが必要であるかどうか分からない。 – stephenmurdoch

+0

しかし、has_one関係は単数形でなければならない<< – eveevans

-1

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

<%= link_to (setting_path(current_user.setting)), do %> 
0

Ahh、これは根本的な問題を発見しました。ありがとう、みんな、私にいくつかのアイデアをくれた。これは、ユーザーモデルをマイグレーションして設定モデルを使用していて、使用していたユーザーには設定がなかったということでした(これはレールコンソールで作成していてとてもうまいです)。だから設定オブジェクトは無し、それは昨日レールを狂わせてしまった。私はエラーのすべての一種を初めて見た。

はい、has_one関連付けを使用しているので、設定のリソースルートは特異でなければなりません。 routes.rbの2行目で、よりシンプルなURL(.../settings)を使って設定をすべて取得しようとしていました。

私はDeviseのedit_user_registration_pathも使用しようとしましたが、前回は何かが間違っていました。おそらく別の考えを与えなければならないでしょう。

ありがとうございました!

関連する問題