在没有ID的情况下找不到ProjectSite。

问题描述 投票:-1回答:1

我有两款车型- ProjectSiteProject.

我上传了一个文件在project_sites表中,现在我想访问该文件在 projects#index. 但我得到一个错误

Couldn't find ProjectSite without an ID

Project和ProjectSite之间有一对多的关联。

Project_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

项目.rb (模型)

has_many :projects
has_many :project_sites
ruby-on-rails ruby-on-rails-5
1个回答
1
投票

当解决动作 project#index 你的参数是空的,所以 params[:project_site_id] 将明显 nil因为你是在集合上操作,而不是单一对象。

我还是不知道你想达到什么目的,但我猜你是想建立起 has_many 联想 Project 模型与 ProjectSite.在模型中适当设置关联后,在。#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

© www.soinside.com 2019 - 2024. All rights reserved.