首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Rails 7刺激方案如果空的话隐藏下拉菜单

Rails 7刺激方案如果空的话隐藏下拉菜单
EN

Stack Overflow用户
提问于 2022-11-16 11:14:29
回答 2查看 33关注 0票数 0

我有一个3类/子类别/子类别依赖下拉列表,一切正常,但我有一个小问题。第二个下拉列表(子类别)并不总是有子类别,所以我想隐藏最后一个下拉列表,只在有子类别时显示它,所以它只显示基于用户选择的子类别。

如果有人能帮忙我会很感激的。

我的分类表

代码语言:javascript
复制
  create_table :categories do |t|
          t.string   "name",        limit: 255
          t.text     "description", limit: 65535
          t.integer  "parent_id",   limit: 4
          t.boolean  "important",                 default: false
          t.integer  "position",    limit: 4,     default: 0
          t.timestamps
        end

在模块中category.rb

代码语言:javascript
复制
 class Category < ApplicationRecord

        validates :name, presence: true
        has_many :jobs
        belongs_to :parent, foreign_key: :parent_id, class_name: 'Category' , :optional => true
        has_many :subcategories, foreign_key: :parent_id, class_name: 'Category'
        has_many :subsubcategories, foreign_key: :parent_id, class_name: 'Category'
end

在模块中job.rb

代码语言:javascript
复制
 class Job < ApplicationRecord

 validates :title,:category_id, :description, presence: true
 validates :category, :presence => true

 belongs_to :user
 belongs_to :category , -> { order("name") }
 belongs_to :subcategories, class_name: "Category"
 belongs_to :subsubcategories, class_name: "Category"

  
end

dropdown_controller.js

代码语言:javascript
复制
import { Controller } from "@hotwired/stimulus";

// connect to data-controller="dropdown"

export default class extends Controller {
    submit () {
           this.element.requestSubmit();
 
    }
 
}

在我的jobs_controller.rb里

代码语言:javascript
复制
  class JobsController < ApplicationController
 
  before_action :authenticate_user!, except: [:index, :show]
  before_action :set_categories

 
  
  def index
    @jobs = Job.all

   
  end
 

 
 
  def new
    @category = Category.find_by(id: params[:category])
    @categories = Category.where(parent_id: nil)  
    @subcategories = @category.subcategories if @category
    @subsubcategories = Category.where(:parent_id => params[:subcategories])  
     @job = Job.new
  

   
  end


  def create
  
  @job = Job.new(job_params.merge({ user: current_user }))
    if @job.save
     format.html { redirect_to root_path, notice: "Job was successfully created." }
    else
    render :new, status: :unprocessable_entity
    
  end
end

private
def job_params
  params.require(:job).permit(:title, :description,:category_id).merge(user: current_user)

end

 



 def set_categories
  @category = Category.find_by(id: params[:category].presence)
  @subcategory = Category.find_by(id: params[:subcategories])
  @subsubcategory = Category.find_by(id: params[:subsubcategories])

 end
end

视图/作业/new.html.erb

代码语言:javascript
复制
  <%= turbo_frame_tag "form" do %>
 
 <%= form_tag new_job_path, method: :get, data: { controller: "dropdown", action: "change->dropdown#submit" } do %>
 <%= select_tag  :category, options_from_collection_for_select(@categories, "id", "name", @category&.id ), prompt:  "Select a category" %>
 <%= select_tag  :subcategories, options_from_collection_for_select(@subcategories  || [], "id" , "name", @subcategory&.id), prompt:  "Select a subcategories category" %>
     <%= select_tag  :subsubcategories, options_from_collection_for_select(@subsubcategories || [], "id" , "name", @subsubcategory&.id), prompt:  "Select a subsubcategories category" %>
      
  <% end %>
 
  <% end %>
EN

回答 2

Stack Overflow用户

发布于 2022-11-16 12:54:12

你为什么不把它藏起来。类似于将视图/作业/new.html.erb更改为如下所示:

代码语言:javascript
复制
<%= turbo_frame_tag "form" do %>
  <%= form_tag new_job_path, method: :get, data: { controller: "dropdown", action: "change->dropdown#submit" } do %>
    <%= select_tag  :category, options_from_collection_for_select(@categories, "id", "name", @category&.id ), prompt:  "Select a category" %>
    <%= select_tag  :subcategories, options_from_collection_for_select(@subcategories  || [], "id" , "name", @subcategory&.id), prompt:  "Select a subcategories category" %>
   <% if @subsubcategories.any? %>
    <%= select_tag  :subsubcategories, options_from_collection_for_select(@subsubcategories || [], "id" , "name", @subsubcategory&.id), prompt:  "Select a subsubcategories category" %>
   <% end %>   
  <% end %>
<% end %>
票数 0
EN

Stack Overflow用户

发布于 2022-11-16 15:18:49

实际上,没有Javascript,我让它完全按照我的要求工作:

代码语言:javascript
复制
 <% if !@subsubcategories.blank? %>

  <%= select_tag   :subsubcategories , options_from_collection_for_select(@subsubcategories || [], "id" , "name", @subsubcategory&.id), prompt:  "Select a subsubcategories category"  %>
 
  <% end %>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74459507

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档