You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Slim-select选择币种后自动显示数据库中的对应价格

解决方案

需要使用Ajax,因为要在不刷新页面的情况下动态从数据库获取对应币种的最新价格。具体实现分三步:

1. 后端添加价格查询接口

在Rails项目中新增一个接口,接收币种名称参数,返回对应价格:

控制器代码

# app/controllers/coins_controller.rb
class CoinsController < ApplicationController
  def get_price
    # 根据名称查询币种
    coin = Coin.find_by(name: params[:name])
    # 返回JSON格式的价格,没找到则返回0
    render json: { price: coin&.shopping_price || 0 }
  end
end

配置路由

# config/routes.rb
Rails.application.routes.draw do
  # 新增价格查询路由
  get 'coins/get_price', to: 'coins#get_price'
  # 其他路由省略
end

2. 前端绑定Slim-select的变更事件

利用你已经使用的Stimulus控制器(data-controller="slim"),编写逻辑监听选择变更,发送Ajax请求并填充价格:

// app/javascript/controllers/slim_controller.js
import { Controller } from "@hotwired/stimulus"
// 确保已引入Slim-select
import SlimSelect from 'slim-select'

export default class extends Controller {
  connect() {
    // 初始化Slim-select组件
    this.slimSelect = new SlimSelect({
      select: this.element
    })

    // 监听选择框的change事件
    this.element.addEventListener('change', this.fetchPrice.bind(this))
  }

  async fetchPrice(event) {
    const coinName = event.target.value
    const priceInput = document.getElementById('investment_shopping_price')

    // 如果未选择币种,清空价格输入框
    if (!coinName) {
      priceInput.value = ''
      return
    }

    try {
      // 发送GET请求到后端接口
      const response = await fetch(`/coins/get_price?name=${encodeURIComponent(coinName)}`)
      const data = await response.json()
      // 将返回的价格填充到输入框
      priceInput.value = data.price
    } catch (error) {
      console.error('获取币种价格失败:', error)
    }
  }
}

3. 验证依赖

确保你的项目已经正确引入了:

  • Slim-select库(可通过npm安装:npm install slim-select)
  • Hotwired Stimulus(Rails 7默认已集成)

内容的提问来源于stack exchange,提问作者Taras Rogulya

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 17:17:59