Ruby on rails 如何将学校id添加到路径?

Ruby on rails 如何将学校id添加到路径?,ruby-on-rails,ruby,Ruby On Rails,Ruby,在我的search.html.haml中,我希望用户能够单击教师姓名,这将引导他们进入教师展示页面。但是,它也要求我有学校id,因为一个老师属于一个学校,一个学校有很多老师。现在,我想知道是否有一种方法可以让我在不破坏申请的情况下将学校id发送到路径。rails现在向我抛出的错误是: 没有路由匹配{:action=>“show”,:controller=>“teachers”,:id=>“1”, :school\u id=>nil}缺少必需的密钥:[:school\u id] 这是我的档案: s

在我的search.html.haml中,我希望用户能够单击教师姓名,这将引导他们进入教师展示页面。但是,它也要求我有学校id,因为一个老师属于一个学校,一个学校有很多老师。现在,我想知道是否有一种方法可以让我在不破坏申请的情况下将学校id发送到路径。rails现在向我抛出的错误是:

没有路由匹配{:action=>“show”,:controller=>“teachers”,:id=>“1”, :school\u id=>nil}缺少必需的密钥:[:school\u id]

这是我的档案:

search.html.haml

.text-center
  / No search results announcement/notification
  - if @teachers.blank?
    %h2 Xin lỗi, hệ thống chúng tôi không có thông tin về giảng viên mà bạn muốn tìm.
  - else
    - @teachers.each do |teacher|
      %h2= link_to teacher.fullName, school_teacher_path(@school, teacher)
      #note
        %em
          Khoa #{teacher.department}, trường #{teacher.school.name}
class TeachersController < ApplicationController
  before_action :find_school, except: [:welcome, :search]
  before_action :find_teacher, only: [:show, :edit, :update, :destroy]

  def welcome
  end

  def show
  end

  def search
    if params[:search].present?
      @teachers = Teacher.search(params[:search], fields: [:fullName])
    else
      @teachers = nil
    end
  end

  def new
    @teacher = @school.teachers.build
  end

  def create
    @teacher = @school.teachers.create(teacher_params)
    @teacher.save
      redirect_to(@school)
  end

  def edit
  end

  def update
    @teacher.update(teacher_params)
    redirect_to(@school)
  end

  private

  def find_school
    @school = School.find(params[:school_id])
  end

  def find_teacher
    @teacher = Teacher.find(params[:id])
  end

  def teacher_params
    params.require(:teacher).permit(:firstName, :lastName, :middleName, :department, :school_id, :fullName)
  end
end
class Teacher < ActiveRecord::Base
  belongs_to :school
  has_many :ratings

  searchkick

  def name
    "#{lastName} #{middleName} #{firstName}"
  end

  def to_s
    name
  end
end
class School < ActiveRecord::Base
  has_many :teachers, dependent: :destroy

  # searchkick
end
Rails.application.routes.draw do
  devise_for :users

  resources :schools do
    # collection do
    #   get 'search'
    # end
    resources :teachers do
      collection do
        get 'search'
      end
    end
  end

  resources :teachers do
    collection do
      get 'search'
    end
    resources :ratings
  end

  root 'teachers#welcome'
end
教师\u控制器.rb

.text-center
  / No search results announcement/notification
  - if @teachers.blank?
    %h2 Xin lỗi, hệ thống chúng tôi không có thông tin về giảng viên mà bạn muốn tìm.
  - else
    - @teachers.each do |teacher|
      %h2= link_to teacher.fullName, school_teacher_path(@school, teacher)
      #note
        %em
          Khoa #{teacher.department}, trường #{teacher.school.name}
class TeachersController < ApplicationController
  before_action :find_school, except: [:welcome, :search]
  before_action :find_teacher, only: [:show, :edit, :update, :destroy]

  def welcome
  end

  def show
  end

  def search
    if params[:search].present?
      @teachers = Teacher.search(params[:search], fields: [:fullName])
    else
      @teachers = nil
    end
  end

  def new
    @teacher = @school.teachers.build
  end

  def create
    @teacher = @school.teachers.create(teacher_params)
    @teacher.save
      redirect_to(@school)
  end

  def edit
  end

  def update
    @teacher.update(teacher_params)
    redirect_to(@school)
  end

  private

  def find_school
    @school = School.find(params[:school_id])
  end

  def find_teacher
    @teacher = Teacher.find(params[:id])
  end

  def teacher_params
    params.require(:teacher).permit(:firstName, :lastName, :middleName, :department, :school_id, :fullName)
  end
end
class Teacher < ActiveRecord::Base
  belongs_to :school
  has_many :ratings

  searchkick

  def name
    "#{lastName} #{middleName} #{firstName}"
  end

  def to_s
    name
  end
end
class School < ActiveRecord::Base
  has_many :teachers, dependent: :destroy

  # searchkick
end
Rails.application.routes.draw do
  devise_for :users

  resources :schools do
    # collection do
    #   get 'search'
    # end
    resources :teachers do
      collection do
        get 'search'
      end
    end
  end

  resources :teachers do
    collection do
      get 'search'
    end
    resources :ratings
  end

  root 'teachers#welcome'
end

school\u teacher\u path
是用一个为零的
@school
调用的,因为
查找学校
不用于
搜索
。您可能希望将
@school
替换为
teacher.school
school\u teacher\u路径(teacher.school,teacher)

您也可以访问案例中的归属关系
teacher.school.id
将返回
学校的
id
教师所属……感谢您的快速回复。但是你能告诉我更多的细节吗?我不太明白。看@froderik的回答。@Minato是的,非常感谢。我会试试他的解决方案。非常感谢。我会尝试你的解决方案,让你知道它是否可以解决我目前的问题。祝你有美好的一天。