Rails 3 - 嵌套资源通过form_for生成无效的URL?

时间:2012-04-08 19:25:45

标签: ruby-on-rails

我有以下form_for标记,该配置文件带有它生成的URL,它无效,即此处是标记:

<%= form_for([current_user,@profile], :html =>{:class => "contact_form",:multipart => true}) do |f| %>

预测这个“action =”/ users / 1 / profile.1“应该是action =”/ users / 1 / profile / 1“

谁能看到我在这里做错了什么?

以下是相关rails文件的一些快照。

的routes.rb

devise_for :users
resources :users, :only => [:delete] do
  resource :profile
end

用户模型

class User < ActiveRecord::Base
  has_one :profile, :inverse_of => :user
  accepts_nested_attributes_for :profile

个人资料模型

class Profile < ActiveRecord::Base
  belongs_to :user
  validates_presence_of :user

rake路线输出:

new_user_session GET    /users/sign_in(.:format)               devise/sessions#new
            user_session POST   /users/sign_in(.:format)               devise/sessions#create
    destroy_user_session DELETE /users/sign_out(.:format)              devise/sessions#destroy
           user_password POST   /users/password(.:format)              devise/passwords#create
       new_user_password GET    /users/password/new(.:format)          devise/passwords#new
      edit_user_password GET    /users/password/edit(.:format)         devise/passwords#edit
                         PUT    /users/password(.:format)              devise/passwords#update
cancel_user_registration GET    /users/cancel(.:format)                devise/registrations#cancel
       user_registration POST   /users(.:format)                       devise/registrations#create
   new_user_registration GET    /users/sign_up(.:format)               devise/registrations#new
  edit_user_registration GET    /users/edit(.:format)                  devise/registrations#edit
                         PUT    /users(.:format)                       devise/registrations#update
                         DELETE /users(.:format)                       devise/registrations#destroy
            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)      profiles#destroy

1 个答案:

答案 0 :(得分:0)

我有同样的问题。我的解决方案是,你必须像这样直接声明网址:

<%= form_for([current_user,@profile], :url => user_profile_path, :html =>{:class => "contact_form",:multipart => true}) do |f| %>

虽然我真的不知道为什么会发生这种事情 - 也许任何人都可以解释......