首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Rails NoMethodError

Rails NoMethodError
EN

Stack Overflow用户
提问于 2016-02-17 16:29:23
回答 1查看 87关注 0票数 0

我有一个非常类似的问题,在这里问这个问题:for,然而,那里的答案使我困惑。

在开发我正在开发的应用程序之前,我阅读了Michael的Rails教程,在我创建模型时,我试着复制他创建用户模型时所做的事情。我的应用程序是为大学教授设计的数据库,所以我使用的模型被称为“教授”,但它与“用户”的概念是相同的。

下面是我的New.html.erb的代码,用户可以在这里创建一个新的教授:

代码语言:javascript
复制
<%provide(:title, 'Add a professor') %>
<div class="jumbotron">
<h2> New Professor</h2>
<div class="row">
  <div class="col-md-6 col-md-offset-3">
    <%= form_for (@professor) do |f| %>
    <%= f.label "First Name" %>
    <%= f.text_field :fname %>

    <%= f.label  "Last Name" %>
    <%= f.text_field :lname %>

    <%= f.label "School" %>
    <%= f.text_field :school %>

    <%= f.submit "Add this professor", class: "btn btn-primary" %>
    <% end %>
  </div>
</div>
</div>

下面是来自Professor_controller.rb的代码

代码语言:javascript
复制
class ProfessorController < ApplicationController
  def show
    @professor = Professor.find(params[:id])
  end

  def new
    @professor = Professor.new
  end
end

当我取代

代码语言:javascript
复制
  <%= form_for (@professor) do |f| %>  

在new.html.erb中有:

代码语言:javascript
复制
  <%= form_for (:professor) do |f| %>

它起作用了。上面提到的线程说了一些关于为控制器添加路由的内容。我的routes.rb看起来是这样的:

代码语言:javascript
复制
Rails.application.routes.draw do

root 'static_pages#home'
get  'about' => 'static_pages#about'
get 'newprof' => 'professor#new'
resources :professor

我不相信在迈克尔·哈特尔的书中他做了什么不同的事。我对Rails还很陌生,所以请原谅我,如果这是一个简单的问题,我已经坚持了几天了,我已经尝试了无数的工作,使用的例子是:教授工作,但@教授不知道,我不知道为什么。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-02-17 16:50:24

在Rails环境中,了解各种名称的多元化需求是非常重要的。请务必将您的资源声明为复数:

代码语言:javascript
复制
resources :professors

以单数声明它可能会破坏自动生成的路由,您将得到类似于professor_path而不是professors_path的东西。您可以检查这些内容是什么:

代码语言:javascript
复制
rake routes

如果您收到x_path丢失的错误,请检查路由列表中是否有一个名为x的路由。最常见的情况是,它被错误地标记,一个错误,或者您没有正确地将它多元化。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35462384

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档