form_for [@ parent,@ child]在Child#new中导致未定义的方法`parent_child_path'

时间:2012-04-27 23:17:23

标签: ruby-on-rails ruby-on-rails-3

因此,用户拥有许多大学(他们已经就读),而大学属于用户。我将这些学院称为college_profile,因为它们是用户个人资料的大学属性。

我在尝试创建一所新大学时遇到了这个问题。我目前为大学的控制员非常简单:

def new
  @user = User.find(params[:id])
  @college = current_user.college_profile.build if signed_in?
end

同样的观点同样简单:( views / college_profiles / new.html.erb)

<%= form_for [@user, @college] do |f| %>
   <%= render 'shared/error_messages', object: f.object %>
   <%= f.label :name %>
 <% end %>

然而,由于某种原因,我收到以下错误:

NoMethodError in College_profiles#new

Showing .../app/views/college_profiles/new.html.erb where line #4 raised:

undefined method `user_college_profiles_path' for #<#<Class:0x5bf1b68>:0x673aef8>

由于我还在学习Rails,我甚至不明白这个错误究竟是指什么。相当数量的Google-ing让我没有运气,或者如果答案 那么我根本就不知道我是在看它。任何帮助将不胜感激!

如果它是相关的,看到我们正在谈论路径,这里是我的路线文件的摘录:

resources :users, :only => [:index, :new, :create, :destroy, :update, :edit] do
  resources :college_profiles, :only => [:new, :create]
end

如果需要更多信息,请告诉我。谢谢!

2 个答案:

答案 0 :(得分:2)

关于form_for的问题是它的URL基于您传入的模型。在您的情况下,它是:

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

Rails会自动查找user_college_profiles_path,因为您已将User分配给@usercurrent_user.college_profile分配给@college

幸运的是,Rails提供了一种覆盖表单在提交时将使用的默认URL的方法:

<%= form_for([@user, @college], :url => your_custom_route_path) do |f| %>

您需要做的就是在your_custom_route

中创建routes.rb

来源:Ruby on Rails Guides: Rails Form Helpers

答案 1 :(得分:0)

Rails正在尝试创建一条路径,用于将数据从表单发布到控制器。它正在寻找的动作是创建,但您只在路线中定义了新的动作。如果您的控制器名为CollegeProfiles,则需要将嵌套路由更改为:

resources :college_profiles, :only => [:new, :create]