2012-04-27 34 views
-2

所以用户有许多高校(他们已经参加),以及一所大学属于用户。我将这些学院称为college_profile,因为它们是用户个人资料的学院属性。的form_for [@parent,@child]导致儿童#未定义的方法`parent_child_path”新

试图生成一个新的大学的时候我遇到了这个问题。我对此刻的大学控制器是非常简单的:

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

和视图同样简单:(视图/ 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的,我真的不明白,即使这是什么错误究竟指。谷歌-ING相当数量的给了我没有运气,或者如果答案是有我根本不知道够意识到我是看着它。任何帮助将不胜感激!

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

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

如果需要任何更多的信息,只是让我知道。谢谢!

+2

您有以下路线:college_profile,不应该是:college_profiles? – 2012-04-28 00:03:27

+0

@ismaelga哇,这可能已经解决了那里的问题。我不断收到混合起来的时候,当没有变复数...... – 2012-04-28 00:06:28

+0

@ismaelga张贴作为回答,这样OP可以接受:) – 2012-04-28 00:16:00

回答

2

事情有关form_for的是,它的网址是基于您在通过模型对你来说,这是:

因为您分配给 User @user,并 current_user.college_profile@college
<%= form_for [@user, @college] do |f| %> 

导轨自动寻找user_college_profiles_path

幸运的是,Rails提供一种方法来替代默认URL的形式将去上提交:

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

所有你需要做的是在你的routes.rb

来源创建your_custom_routeRuby on Rails Guides: Rails Form Helpers

+0

谢谢!这似乎让我过去了错误,但是......说实话,我不知道我应该给它什么网址。我生成了一个到'College_Profile#create'的命名路径,但是它似乎没有包含任何表单数据。任何想法我做错了什么? – 2012-04-27 23:57:35

+0

'User'和'CollegeProfile'的关系是什么?它是一对多的吗?根据您的编辑,我认为您的问题与您的模型和路线有关,而不是表单本身。 – 2012-04-28 00:08:40

+0

用户有很多院校,学院属于用户。添加自定义网址会阻止错误,但可能会导致新问题 - 可能是由于我的模型。我以为我可以把表格交给College_Profile创建方法,它会尝试保存数据。 – 2012-04-28 00:16:32

0

Rails正在试图创建将用于从表单数据上传到控制器的路径。它正在寻找的动作是创建,但您只有在路线中定义了新动作。如果您的控制器称为CollegeProfiles,那么你需要将嵌套的路线更改为:

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

感谢您的快速回复,但不是这样。我补充说,它并没有改变。此外,据我了解,新的是用于初始化新对象,创建是在您提交表单并保存之后。无论哪种方式,我给它一个镜头,但没有运气 – 2012-04-27 23:25:46

+0

你重新启动你的服务器?如果你运行耙路线,你会得到什么? – 2012-04-28 14:32:21

相关问题