1

このエラーは、ルートが「user_profile_path」のようなものであるのに対し、未定義のメソッド「user_profiles_path」であることを示しています。プロファイルは、ユーザーの単一の子リソースです。このエラーの原因がわかりません。エラーは<%= form_for [@user, @profile] do |f| %>_form.html.erb で発生します。

Routes.rb:

devise_for :users, :path_names => { :sign_in => "login", :sign_up => "register" } do   
   get "/login", :to => "devise/sessions#new"
   get "/register", :to => "devise/registrations#new"
   get "/logout", :to => "devise/sessions#destroy"
   get '/account' => 'devise/registrations#edit'
 end

  root :to => "questions#redirect_on_visit" 

  match 'home', :to => "questions#index"

  resources :questions do
    resources :question_responses
  end

  resources :users do
    resource :profile
  end

_form.html.erb:

<%= form_for [@user, @profile] do |f| %>

 <%= f.error_messages %>    

 <div class="field">
    <%= f.label :display_name, "Display Name" %><br />
    <%= f.text_field :display_name, :size => "43" %><br />
 </div>

 <div class="field">
    <%= f.label :current_location, "Current Location" %><br />
    <%= f.text_field :current_location, :size => "43" %><br />
 </div>

 <div><%= f.label :nationality, "Nationality" %><br />
    <%= f.collection_select :nationality, Profile::NATIONALITY, :include_blank => true %>
 </div><br />

 <div><%= f.label :home_place, "Home Place" %><br />
    <%= f.collection_select :home_place, Profile::HOME_PLACE, :include_blank => true %>
 </div><br />

  <div><%= f.label :occupation, "Occupation" %><br />
    <%= f.collection_select :occupation, Profile::OCCUPATION, :include_blank => true %>
  </div><br />

  <div><%= f.label :interest, "Interests" %><br />
    <%= f.collection_select :interest, Profile::INTERESTS, :include_blank => true %>
  </div><br />

  <div><%= f.label :hobby, "Hobbies" %><br />
    <%= f.collection_select :hobby, Profile::HOBBIES, :include_blank => true %>
  </div><br />

  <div class="field">
    <%= f.label :bio, "Short Bio" %><br />
    <%= f.text_area :bio, :size => "50x5" %>
  </div>

  <div class="submit">
    <%= f.submit "Create Profile" %>
  </div>

<% end %>

profile_controller.rb:

class ProfilesController < ApplicationController

  before_filter :find_user

  def new
    @profile = @user.build_profile    
  end

  def edit

  end

  private

  def find_user
    @user = User.find(params[:user_id])
  end
end

application.html.erb:

<% if user_signed_in? %>
            <% if !current_user.try(:profile) %>
                Signed in as<div><%= link_to current_user.email, new_user_profile_path(current_user.id) %></div><br /><br />
            <% else %>
                Signed in as<div><%= link_to current_user.email, edit_user_profile_path(current_user.id) %></div><br /><br />
            <% end %>           
            Not you? <%= link_to "Sign out", logout_path %>
        <% else %>
            <%= link_to "Sign up", new_user_registration_path %> or <%= link_to "Sign in", new_user_session_path %>
        <% end %>

ルート:

user_profile POST   /users/:user_id/profile(.:format)                             profiles#create
               new_user_profile GET    /users/:user_id/profile/new(.:format)                         profiles#new
              edit_user_profile GET    /users/:user_id/profile/edit(.:format)                        profiles#edit
                                GET    /users/:user_id/profile(.:format)                             profiles#show
                                PUT    /users/:user_id/profile(.:format)                             profiles#update
                                DELETE /users/:user_id/profile(.:format)           
4

2 に答える 2

1

ここで報告されているように、このエラーは既知のバグです: https://github.com/rails/rails/issues/1769

そして、URL を指定する正しい方法を見つけました。

form_for([@user, @profile], url: user_profile_path(@user))

中括弧を使用することは構文的に重要であり、form_for と括弧の間にスペースがないことも重要です。

于 2012-07-02T17:40:07.437 に答える
0

これを修正するには、次の形式で URL を手動で指定します。

<%= form_for [@user, @profile], :url => user_profile_path(@user) do |f| %>
于 2012-07-01T16:27:32.687 に答える