【问题标题】:How to stay on the same page when I click on sidebar links in Rails当我单击 Rails 中的侧边栏链接时如何保持在同一页面上
【发布时间】:2026-01-14 15:55:01
【问题描述】:

我有 3 个模型,其中员工拥有_many 保险和员工拥有_many 教育以及保险和教育都属于_员工。

整个流程运行良好。

现在我有一个要求,当我点击员工 -> 编辑时,我必须在编辑表单下显示一个带有保险和教育链接的侧边栏。当我点击保险/教育时,它应该呈现在同一个编辑页面中。

员工/edit.html.erb

<h1>
  <%= @employee.full_name %>
</h1>
<div class="tabpanel">
  <div class="tab-content">
    <div class="tab-pane active" id="home" role="tabpanel">
      <%= render 'form' %>
    </div>
  </div>
</div>
<%= render 'layouts/sidebar' %>

layouts/_sidebar.html.erb

<div class="sidebar">
  <ul class="nav">
    <li>
      <%= link_to image_tag("Insurances.png")+"Insurances",  employee_insurances_path(@employee) %>
    </li>
    <li>
      <%= link_to image_tag("Education.png")+"Education", employee_educations_path(@employee) %>
    </li>
  </ul>
</div>

我的保险控制人

class InsurancesController < ApplicationController
  before_action :set_insurance, only: [:show, :edit, :update, :destroy]

  respond_to :html

  def index
    @employee = Employee.find(params[:employee_id])
     @insurances = @employee.insurances.all
    respond_with(@insurances)
  end

  def show
    @employee = Employee.find(params[:employee_id])
    respond_with(@insurance)
  end

  def new
    @employee = Employee.find(params[:employee_id])
    @insurance = @employee.insurances.build
  end

  def edit
      @employee = Employee.find(params[:employee_id])
  end

  def create
    @employee = Employee.find(params[:employee_id])
    @insurance = @employee.insurances.create(insurance_params)
    redirect_to employee_path(@employee)  
  end

  def update    
  @employee = Employee.find(params[:employee_id])
    @insurance.update(insurance_params)
    redirect_to employee_path(@employee)  
  end

  def destroy
        @employee = Employee.find(params[:employee_id])
    @insurance.destroy
    redirect_to employee_path(@employee)  
  end

  private
    def set_insurance
      @insurance = Insurance.find(params[:id])
    end

    def insurance_params
      params.require(:insurance).permit(:name_of_dependent, :relationship,:policy_numbere)
    end
end

知道当我点击侧边栏链接时如何呈现同一页面吗?

【问题讨论】:

    标签: ruby-on-rails


    【解决方案1】:

    我的理解是,您有两种编辑表格,一种用于保险,另一种用于教育。或者您可能只有一个表格。您需要做的是当用户单击侧边栏中的链接时,向控制器发送 AJAX 请求。创建表单的一部分。在 AJAX 请求成功的情况下,将表单附加到页面上您想要的任何位置,如下所示:

    $('#container').append('<%= escape_javascript(render :partial => "form", :locals => {:employee => employee}) %>');
    

    本地人是可选的。 #container 是现有页面的 DOM 中的 section/div 或任何元素,您可以将其重命名为任何内容。在控制器中发送请求的操作中,您需要这样编写:

    respond_to do |format|
      format.js
    end
    

    这将搜索以您的操作名称为扩展名且扩展名为 js.eb 的文件。例如,您将其发送到edit 操作,则文件名应为视图文件夹中的edit.js.erb。并在js.erb中编写追加部分的代码。

    希望这会有所帮助。

    【讨论】:

      最近更新 更多