没有 ID 找不到 ProjectSite

Couldn't find ProjectSite without an ID

我有两个模型 - ProjectSiteProject

我在 project_sites table 中上传了一个文件,现在我想在 projects#index 中访问该文件。但是我收到一个错误

Couldn't find ProjectSite without an ID

Project 和 ProjectSite 之间存在一对多关联。

projects_controller.rb

  before_action :find_project_sites?

    def find_project_sites?
      @project_sites = ProjectSite.find(params[:project_site_id])
    end

在控制器视图中

<% @project_sites.each do |project_site| %>
<% end %>

这里是schema.rb

  create_table "project_sites", force: :cascade do |t|
    t.string "attendance"
    t.integer "user_id"
    t.integer "project_id"
    t.index ["project_id"], name: "index_project_sites_on_project_id"
    t.index ["user_id"], name: "index_project_sites_on_user_id"
  end

  create_table "projects", force: :cascade do |t|
    t.string "project_name"
    t.datetime "created_at", null: false
    t.integer "user_id"
  end

routes.rb

resources :project_sites
resources :projects
devise_for :users

project.rb(型号)

has_many :projects
has_many :project_sites

解析操作时 project#index 你的参数是空的,所以 params[:project_site_id] 显然是 nil,因为你在操作集合,而不是单个对象。

我仍然不确定您要达到什么目的,但我猜您正在尝试在 Project 模型与 ProjectSite 上建立 has_many 关联。 在模型中正确设置关联后,在 #index 您可以为每个索引项目达到 project_sites

Project.all.each do |project|
  project.project_sites
end

关于成员操作(#show#create#edit#update等)您需要设置项目

@project = Project.find(:id)

可能会在 :befor_action 内完成,但仅限于 only: [:show, :edit, :create, :update, :destroy]。接下来你可以通过 @project.project_sites

获取关联站点