2

ネストされたリソースのルーティングに問題があります。私がやろうとしているのは、編集目的でユーザーのプロファイルページにリンクすることです。私の見解では、それは次のように書かれています:

<%= link_to "Edit Profile", edit_user_profile_path(current_user) %>

どのエラーが発生しますか:

No route matches {:action=>"edit", :controller=>"profiles", :user_id=>#<User id: 1, email: "EDITEDOUT", hashed_password: "EDITEDOUT", created_at: "2011-01-20 18:30:44", updated_at: "2011-01-20 18:30:44">}

私のroutes.rbファイルでは、次のようになっています。

resources :users do
  resources :profiles, :controller => "profiles"
end  

私は自分のレーキルートをチェックしました、そしてそれは私にこれを有効なオプションとして与えました:

edit_user_profile GET    /users/:user_id/profiles/:id/edit(.:format)   {:action=>"edit", :controller=>"profiles"}

手動で移動できます。適切な対策として、これが私のコントローラーの証明です。

class ProfilesController < ApplicationController
  def edit
    @user = current_user
    @profile = current_user.profile
  end

  def update
    @user = current_user
    @profile = current_user.profile


    respond_to do |format|
      if @profile.update_attributes(params[:profile])
        format.html { redirect_to(orders_path, :notice => "Your profile has been updated.") }
        format.xml  { head :ok }
      else
        format.html { render :action => "edit" }
        format.xml  { render :xml => @profile.errors, :status => :unprocessable_entity }
      end
    end
  end
end

とにかく、私はこれを追跡するのにいくつかの問題を抱えています。どんなポインタでも役に立ちます。私のDB設計では、プロファイルは1対1の関係にあるユーザーに属しています。私はそれがちょうど新しいものであることを望んでいます私は新しい目のセットが役立つかもしれないことに気づいていません。

4

1 に答える 1

2

:user_idルートをよく見ると、 aと an の両方が必要であることがわかります:id。この場合、後者はユーザープロファイルを指します。

その特定のプロファイルが必要であることを Rails に伝えるには、次のように、リンクでユーザーとプロファイルの両方を指定する必要があります。

edit_user_profile_path(current_user, @profile)

これで、Rails は最初の引数 ( current_user) を:user_idルートの部分に使用し、2 番目の引数 ( @profile) を:id.

于 2011-01-20T23:27:14.507 に答える