因此,用户拥有许多大学(他们已经就读),而大学属于用户。我将这些学院称为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
如果需要更多信息,请告诉我。谢谢!
答案 0 :(得分:2)
关于form_for
的问题是它的URL基于您传入的模型。在您的情况下,它是:
<%= form_for [@user, @college] do |f| %>
Rails会自动查找user_college_profiles_path
,因为您已将User
分配给@user
,current_user.college_profile
分配给@college
。
幸运的是,Rails提供了一种覆盖表单在提交时将使用的默认URL的方法:
<%= form_for([@user, @college], :url => your_custom_route_path) do |f| %>
您需要做的就是在your_custom_route
routes.rb
答案 1 :(得分:0)
Rails正在尝试创建一条路径,用于将数据从表单发布到控制器。它正在寻找的动作是创建,但您只在路线中定义了新的动作。如果您的控制器名为CollegeProfiles,则需要将嵌套路由更改为:
resources :college_profiles, :only => [:new, :create]