Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql Rails未定义的方法`email';零级:零级_Mysql_Ruby On Rails_Ruby_Activerecord - Fatal编程技术网

Mysql Rails未定义的方法`email';零级:零级

Mysql Rails未定义的方法`email';零级:零级,mysql,ruby-on-rails,ruby,activerecord,Mysql,Ruby On Rails,Ruby,Activerecord,我在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", opti

我在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
projects\u 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
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
<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 %>
class ProjectsController
模型文件夹中的模型文件 project.rb和user.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
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
<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 %>
class用户
调用我的代码电子邮件列 index.html.erb

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
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
<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 %>

项目 名称 描述 单位 经理

架构中的数据似乎起草得不好。
User
Manager
是同一件事吗?如果不是,您应该在
项目
表中有一个
用户id
引用,否则,您必须添加将
管理者id
用户
关联的适当关联,然后您可以拥有
项目.管理者.电子邮件

架构中的数据似乎起草得不太好。
User
Manager
是同一件事吗?如果不是,您应该在
项目
表中有一个
用户id
参考,否则,您必须将
管理者id
添加到
用户
中,然后您可以有
项目.管理者.电子邮件
您的
项目
有一个
管理者id
,但是没有名为
managers
的表,而是
users
。因此,在项目和用户之间的关系中,需要使用正确的键

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

class Project < ApplicationRecord
  belongs_to :user, foreign_key: :manager_id
end
class用户
您的
项目
有一个
管理员id
,但没有名为
管理员
的表,而是
用户
。因此,在项目和用户之间的关系中,需要使用正确的键

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

class Project < ApplicationRecord
  belongs_to :user, foreign_key: :manager_id
end
class用户
如果用户是项目的可选用户,只需呼叫
项目。用户和电子邮件
如果用户是项目的可选用户,只需呼叫
项目。用户和电子邮件

您的
项目
控制器如何?resimag.com/p1/c7e6e3b5f41.png resimag.com/p1/c541f8849df.pngd您有旅游协会吗?看起来有些
项目
没有
用户
。为了避免这种情况,我建议在
Project
模型中使用
validates:user\u id,presence:true
。在
projects
表中没有
user\u id
列,只有
manager\u id
。但同时,没有
managers
表,只有
users
表。显然,您没有遵循Rails命名约定,因此必须向关联配置添加更多选项(因为
manager\u id
指向
users
表上的外键)。但是,即使您必须做出决定,该关联是否应命名为
manager
(如在模型和数据库中)或
user
(您视图中的链接)。请澄清!您的
项目
控制器如何?resimag.com/p1/c7e6e3b5f41.png resimag.com/p1/c541f8849df.pngd您是否有旅游协会?看起来有些
项目