-2

所以一个用户有很多大学(他们就读过),一个大学属于一个用户。我将这些学院称为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,我什至不明白这个错误到底指的是什么。相当多的谷歌搜索让我没有运气,或者如果答案在那里,我根本就没有意识到我在看它。任何帮助将不胜感激!

如果它是相关的,当我们谈论路径时,这是我的路线文件的摘录:

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

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

4

2 回答 2

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 指南:Rails 表单助手

于 2012-04-27T23:38:25.660 回答
0

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

resources :college_profiles, :only => [:new, :create]
于 2012-04-27T23:23:17.340 回答