'New'方法在Rails应用程序中找不到,但它存在



如果这是一个愚蠢的问题,请提前道歉。我正在从头开始学习 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是否有一些标志以启用它。

最新更新