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

Rails项目使用Materialize Gem配置下拉菜单选项的技术咨询

Properly Setting Up Materialize Dropdown in Rails (with Asset Pipeline)

Hey there! Let's get that Materialize dropdown working smoothly in your Rails app with the asset pipeline. I'll walk you through fixing your code, initializing the component, and verifying your setup step by step.

1. Fix Your HTML Structure

Your original code had unclosed tags and missing attributes. Here's the cleaned-up, valid version:

<!-- Dropdown Content -->
<ul id="dropdown1" class="dropdown-content z-depth-0">
  <li><a href="#profile-settings">Profile settings</a></li>
  <li><a href="#payments">Payments</a></li>
</ul>

<!-- Dropdown Trigger Button -->
<a class="dropdown-button btn-large btn-flat waves-effect menu_trigger" href="#!" data-activates="dropdown1">
  <i class="material-icons">menu</i>
</a>

Key fixes to note:

  • Closed all <li> and <a> tags properly
  • Added meaningful href attributes (replace these with your actual Rails routes, like <%= profile_settings_path %> if using named routes)
  • Ensured the data-activates value exactly matches the dropdown's id (dropdown1)—this is critical for the trigger to connect to the dropdown content

2. Initialize the Dropdown with JavaScript

You need to initialize the dropdown once the DOM is fully loaded. Add this code to your application.js or a controller-specific JS file:

// Wait for the DOM to finish loading before initializing
document.addEventListener('DOMContentLoaded', function() {
  // Select your dropdown trigger element
  const triggerElem = document.querySelector('.menu_trigger');
  // Initialize the dropdown with optional configuration
  const dropdownInstance = M.Dropdown.init(triggerElem, {
    // Customize these options to fit your needs
    hover: false, // Disable dropdown on hover (default is true)
    constrainWidth: true, // Keep dropdown width matching the trigger
    coverTrigger: false, // Prevent dropdown from covering the trigger button
    alignment: 'right' // Align dropdown to the right of the trigger
  });
});

If you're using jQuery in your Rails app, you can use this shorter syntax instead:

$(document).ready(function(){
  $('.menu_trigger').dropdown({
    hover: false,
    alignment: 'right'
  });
});

3. Confirm Asset Pipeline Setup

Double-check that Materialize is properly included in your asset pipeline:

  • In app/assets/stylesheets/application.css:
    *= require materialize
    *= require_tree .
    *= require_self
    
  • In app/assets/javascripts/application.js:
    //= require jquery
    //= require materialize
    //= require_tree .
    

(Note: If you're using a newer Rails version without jQuery, skip the //= require jquery line.)

4. Quick Troubleshooting Tips

  • If the dropdown won't open, check your browser's console for JavaScript errors—common issues include missing Materialize JS files, incorrect selectors, or initializing before the DOM is ready.
  • Make sure data-activates and the dropdown's id are an exact match (case-sensitive!).
  • If styling looks off, confirm Materialize CSS is loading correctly by inspecting the page's styles in your browser dev tools.

内容的提问来源于stack exchange,提问作者Marcos R. Guevara

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 08:53:02