如果这是一个愚蠢的问题,请提前道歉。我正在从头开始学习 Rails,所以感谢您对我的宽容。
所以,我有一个"人"模型,如下所示
class Person < ActiveRecord::Base
belongs_to :team
has_and_belongs_to_many :events, through: :event_people
validates :first_name, presence: true, length: { maximum: 255 }
validates :last_name, presence: true, length: { maximum: 255 }
validates :email, presence: true, length: { maximum: 255 }
end
并创建了一个表单来创建新人员,并具有关联的团队 ID
<h1>Add new person</h1>
<div class="row">
<div class="col-md-8">
<%= form_with url: new_person_path do |person| %>
<div class="form-group">
<%= person.label :first_name %>
<%= person.text_field :name, id: :person_first_name, class:"form-control" %>
</div>
<div class="form-group">
<%= person.label :last_name %>
<%= person.text_field :name, id: :person_last_name, class:"form-control" %>
</div>
<div class="form-group">
<%= person.label :email %>
<%= person.text_field :email, id: :person_email, class:"form-control" %>
</div>
<div class="form-group">
<%= person.label :job_title %>
<%= person.text_field :job_title, id: :person_job_title, class:"form-control" %>
</div>
<div class="form-group">
<% @teams = Team.all %>
<%= person.label :team %>
<%= person.select(:team_id, @teams.collect{|a| [a.name, a.id]}, { include_blank: true }, {:class => "form-control"}) %>
</div>
<div class="actions">
<%= person.submit 'Submit button', {:class => 'btn btn-primary'}%>
</div>
<% end %>
</div>
</div>
我的 routes.rb 文件是这样设置的:
Rails.application.routes.draw do
resources :people
resources :teams
resources :organisations
resources :events
end
但是每当我提交表单以创建新人员时,都会在控制台中收到以下错误:
POST http://localhost:3000/people/new 404 (Not Found)
事件,尽管相关方法存在于我的 people_controller.rb 中:
class PeopleController < ApplicationController
def index
@people = Person.all
end
def show
@people = Person.find(params[:id])
end
def new
@people = Person.new
respond_to do |format|
format.html # new.html.erb
format.json { render :json => @people }
end
end
def create
@people = Person.new(params[:person])
respond_to do |format|
if @people.save
format.html { redirect_to(@people,
:notice => 'Person was successfully created.') }
format.json { render :json => @people,
:status => :created, :location => @people }
else
format.html { render :action => "new" }
format.json { render :json => @people.errors,
:status => :unprocessable_entity }
end
end
end
谁能建议我可能做错了什么?
当你有一个底层模型时,你会想要使用<%= form_with model: @people do |person| %>
参考: http://api.rubyonrails.org/v5.1/classes/ActionView/Helpers/FormHelper.html#method-i-form_with
您正在发布一种方法,至少据我所知,该方法应该输出一个空表单来输入您个人的属性。
首先尝试一个 GET,这将符合 REST URL 的轨道解释。很可能,正确的路线在最后也没有/new
。
接下来,尝试rails routes
列出所有可用的路由。
顺便说一下,如果在开发中,rails应该给你一个有意义的,大的帮助页面,可能包括可用的路线。检查您的development.rb
是否有一些标志以启用它。