1

通常のアクションセット(インデックス、表示、新規、編集など)を備えた標準のユーザーコントローラーがあり、「プロファイル」という名前の新しいアクションを追加しようとしています。次のコードを追加しました。

def profile
    @user = User.find(session[:user_id])
end

アクションの新しいビュー(app / views / users / profile.html.erb)も作成しましたが、そのページを表示しようとするとエラーが発生します。

UsersController#showのActiveRecord ::RecordNotFound
ID=profileのユーザーが見つかりませんでした
..。

どうやらそれはショーアクションを打っています。これを機能させるには、ルートに何かを追加する必要があると思いますが、何がわかりません。これまでのところ、2つのデフォルトルートとコメントを外したmap.root行があります。

map.root :controller => "home"
map.connect ':controller/:action/:id'
map.connect ':controller/:action/:id.:format'

だから本当に私は2つの質問があります:

  1. 新しいアクションを有効にするには、何をする必要がありますか?
  2. なぜ既存のルートはこの状況をカバーしないのですか?コントローラとアクションだけで構成される他のURLは問題なく機能します(例:http:// localhost:3000 / users / new)。なぜこれではないのですか?:controller = users、:action = profile、:id = nilと評価するだけではいけませんか?
4

5 に答える 5

1

このようなものをroutes.rbファイルに入れてみてください。

map.user_profile '/users/:id/profile', :controller => "users", :action => 'profile', :conditions => {:method => :get}

おそらく、これを行っている理由は、:idを設定していないため(アクションをidとして検出している場合でも)、デフォルトのいずれにも一致していないためだと思います。URLがどのように表示されるかはわかりませんが、http:// localhost:3000 / users / 123124124 / profileを試してみると、ルートに改行がなくても機能する可能性があると思います。

于 2009-07-28T06:23:20.797 に答える
0

params [:id]ではなくsession [:user_id]から意図的にIDを取得しようとしていますか?これは公開プロフィールを表示することになっていますか?

于 2009-07-28T05:13:43.027 に答える
0

ページを初めてロードするときに、セッションにuser_idが含まれていることを確認しますか?

于 2009-07-28T08:07:57.527 に答える
0

すべてのコードを見ずに言うのは難しいですが、モデルとコントローラーの名前が同じであるため、奇妙なことがあるかもしれません。他の何かを変更する前に、コントローラーの名前を変更してみます(views / usersディレクトリの名前も変更することを忘れないでください)。

この他のスタックオーバーフローの投稿も参照してください:RailsはRubyクラスと同じ名前のモデルを見つけることができません

多分ロングショット。

于 2009-07-28T12:16:14.290 に答える
0

問題の解決策は、idがパラメーターとして渡されるようにroutes.rbを構成します。

以下のようにroutes.rbで構成します

 map.profile '/profile/:id',:controller=>'users',:action=>'profile' 

プロフィールページにアクセスしたい場合は、次のURLで使用してください

http:// localhost:3000 / profile

ログインしたら、uがセッションを処理し、ユーザーIDをセッション変数に格納していることを確認してください。

幸運を !

于 2009-07-28T16:46:36.557 に答える