我有两款车型- ProjectSite
和 Project
.
我上传了一个文件在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
当解决动作 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