为 nil:NilClass 定义的 Rails 未定义方法 `email'

厄兹古尔·萨里奥格兰

我在 Rails 应用程序中收到以下错误。你能帮助我吗?

连接两个表时出现错误。用户想要使用表格。我正在尝试从单个表中管理经理 ID 和用户 ID 字段。

ruby 2.5.1p57 (2018-03-29 修订版 63029) [x86_64-darwin17]

导轨 5.2.2

数据库设计

错误信息

数据库设计和表schema.rb:

ActiveRecord::Schema.define(version: 2019_02_24_160401) do

  create_table "projects", options: "ENGINE=InnoDB DEFAULT CHARSET=utf8", force: :cascade do |t|
    t.string "name"
    t.text "description"
    t.string "company"
    t.bigint "manager_id"
    t.datetime "created_at", null: false
    t.datetime "updated_at", null: false
    t.index ["manager_id"], name: "index_projects_on_manager_id"
  end

  create_table "users", options: "ENGINE=InnoDB DEFAULT CHARSET=utf8", force: :cascade do |t|
    t.string "email", default: "", null: false
    t.string "username", default: "", null: false
    t.string "fullname", default: ""
    t.bigint "manager"
    t.string "company", default: ""
    t.string "department", default: ""
    t.boolean "isadmin", default: false
    t.string "encrypted_password", default: "", null: false
    t.string "reset_password_token"
    t.datetime "reset_password_sent_at"
    t.datetime "remember_created_at"
    t.datetime "created_at", null: false
    t.datetime "updated_at", null: false
    t.index ["email"], name: "index_users_on_email", unique: true
    t.index ["reset_password_token"], name: "index_users_on_reset_password_token", unique: true
  end

  add_foreign_key "projects", "users", column: "manager_id"
end

project_controller.rb

class ProjectsController < ApplicationController
  before_action :set_project, only: [:show, :edit, :update, :destroy]
  before_action :find_users, only: [:index, :show, :new, :edit]
  # GET /projects
  # GET /projects.json
  def index
    @projects = Project.all
  end

  # GET /projects/1
  # GET /projects/1.json
  def show
  end

  # GET /projects/new
  def new
    @project = Project.new
  end

  # GET /projects/1/edit
  def edit
  end

  # POST /projects
  # POST /projects.json
  def create
    @project = Project.new(project_params)

    respond_to do |format|
      if @project.save
        format.html { redirect_to @project, notice: 'Project was successfully created.' }
        format.json { render :show, status: :created, location: @project }
      else
        format.html { render :new }
        format.json { render json: @project.errors, status: :unprocessable_entity }
      end
    end
  end

  # PATCH/PUT /projects/1
  # PATCH/PUT /projects/1.json
  def update
    respond_to do |format|
      if @project.update(project_params)
        format.html { redirect_to @project, notice: 'Project was successfully updated.' }
        format.json { render :show, status: :ok, location: @project }
      else
        format.html { render :edit }
        format.json { render json: @project.errors, status: :unprocessable_entity }
      end
    end
  end

  # DELETE /projects/1
  # DELETE /projects/1.json
  def destroy
    @project.destroy
    respond_to do |format|
      format.html { redirect_to projects_url, notice: 'Project was successfully destroyed.' }
      format.json { head :no_content }
    end
  end

  private
    # Use callbacks to share common setup or constraints between actions.
    def set_project
      @project = Project.find(params[:id])

    end

    def find_users
      @users = User.all.order('created_at desc')
    end

    # Never trust parameters from the scary internet, only allow the white list through.
    def project_params
      params.require(:project).permit(:name, :description, :user_id)
    end
end

模型文件夹project.rb 和 user.rb中的模型文件

class User < ApplicationRecord
  # Include default devise modules. Others available are:
  # :confirmable, :lockable, :timeoutable, :trackable and :omniauthable
  has_many :projects
end

class Project < ApplicationRecord
  belongs_to :user
end

调用我的代码电子邮件列index.html.erb

<p id="notice"><%= notice %></p>

<h1>Projects</h1>

<table>
  <thead>
    <tr>
      <th>Name</th>
      <th>Description</th>
      <th>Company</th>
      <th>Manager</th>
      <th colspan="3"></th>
    </tr>
  </thead>

  <tbody>
    <% @projects.each do |project| %>
      <tr>
        <td><%= project.name %></td>
        <td><%= project.description %></td>
        <td><%= project.company %></td>
        <td><%= project.user.email %></td>
        <td><%= link_to 'Show', project %></td>
        <td><%= link_to 'Edit', edit_project_path(project) %></td>
        <td><%= link_to 'Destroy', project, method: :delete, data: { confirm: 'Are you sure?' } %></td>
      </tr>
    <% end %>
  </tbody>
</table>

<br>

<%= link_to 'New Project', new_project_path %>
罗宾·范戴克

Project有一个manager_id,但没有名为 的表managers,而是users所以在你的项目和用户的关系中,需要使用正确的key。

class User < ApplicationRecord
  has_many :projects, foreign_key: :manager_id
end

class Project < ApplicationRecord
  belongs_to :user, foreign_key: :manager_id
end

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Rails为nil:NilClass使用的未定义方法`id'

Rails为nil:NilClass使用的未定义方法`user'

Rails:nil:NilClass的未定义方法

为nil:NilClass提供Rails未定义方法`each'...但已定义

rails 3.2 NoMethodError未定义的方法'slice'为nil:NilClass

无法为nil:NilClass加载'rails.application.database_configuration'未定义的方法'[]'

遵循Rails教程,为nil:NilClass使用嵌套资源的未定义方法'create'

Rails Carrierwave为nil:NilClass上传多个文件未定义的方法“ []”

Ruby on Rails 未定义方法“course_name”为 nil:NilClass

nil:NilClass Devise的未定义方法`email'

每个为 nil 的未定义方法:NilClass

未定义的方法 `router_name' 为 nil:NilClass

为nil:NilClass获取未定义的方法“ each”

NoMethodError未定义的方法'[] ='为nil:NilClass

为nil:NilClass设计未定义的方法“ build”

NoMethodError(为 nil:NilClass 未定义方法 `created_at')

NoMethodError未定义的方法`name'为nil:NilClass

为 nil:NilClass (NoMethodError) 获取错误未定义的方法“[]”

为nil:NilClass获取未定义的方法“错误”

未定义的方法“课程”为 nil:NilClass

未定义的方法 `with_indifferent_access' 为 nil:NilClass

未定义的方法 `user' 为 nil:NilClass

nil:NilClass rails 的未定义方法 `count'

Rails DateTime-NoMethodError(nil:NilClass的未定义方法“ []”)

学习 Ruby on Rails:NoMethodError(未定义方法 `[]' for nil:NilClass):

rails 中 nil:NilClass 的未定义方法“错误”

nil:NilClass Ruby on Rails的未定义方法'>'(NoMethodError)

EasyMarklet Rails gem:nil:NilClass的未定义方法“ []”

nil:NilClass的未定义方法“错误”-Ruby on Rails