2015-10-02 158 views
0

当我点击导航栏中的“帐户”链接时,下拉菜单不会出现。发生什么事情是将#添加到URL的末尾,以便用户/ 1成为用户/ 1#。Hartl 3rd ed section 8.2.3 dropdown not working

有关下拉不起作用的问题已在此处询问:ruby on rails chapter 8, 3rd Edition. About menu dropdown。我用我的application.js文件尝试了一些变体,我将在下面展示,并且据我所知,我的sessions_controller.rb和我的sessions_helper.rb与Hartl所具有的相匹配。

我正在使用Windows和Chrome。

我已经在Chrome的开发控制台中启用了“show user agent shadow DOM”,并且我看到了下拉菜单的html。我没有看到任何错误消息。

我认为有一种控制器错误或某种Bootstrap/Sass/Rails版本不兼容。我确实得到了在Hartl第2版第8章中的下拉菜单,但我不想将这些宝石推回到那么远。

我的application.js:

//= require jquery 
//= require jquery_ujs 
//= require bootstrap 
//= require turbolinks 
//= require_tree . 

我也试过

//= require jquery 
//= require bootstrap 
//= require jquery_ujs 
//= require turbolinks 
//= require_tree . 

我已经试过底涂引导链轮的引导。

sessions_helper.rb:

module SessionsHelper 
    def log_in(user) 
    session[:user_id] = user.id 
    end 

    def current_user 
    @current_user ||= User.find_by(id: session[:user_id]) 
    end 

    def logged_in? 
    !current_user.nil? 
    end 
end 

我试着更换current_user.nil!?与current_user.nil?但那不起作用。

sessions_controller.rb

class SessionsController < ApplicationController 
    def new 
    end 

    def create 
    user = User.find_by(email: params[:session][:email].downcase) 
    if user && user.authenticate(params[:session][:password]) 
     log_in user 
     redirect_to user 
    else 
     flash.now[:danger] = 'Invalid email/password combination' 
     render 'new' 
    end 
    end 

    def destroy 
    end 
end 

的Gemfile(部分)

gem 'rails', '4.2.2' 
gem 'bcrypt', '3.1.7' 
gem 'pg', '~> 0.18.3' 
gem 'bootstrap-sass', '3.2.0.0' 
gem 'sass-rails', '5.0.2' 
gem 'uglifier', '2.5.3' 
gem 'coffee-rails', '4.1.0' 
gem 'jquery-rails', '4.0.3' 
gem 'turbolinks', '2.3.0' 
gem 'jbuilder', '2.2.3' 

Custom.css.scss(第一2行)

@import "bootstrap-sprockets"; 
@import "bootstrap"; 

最后,_header.html.erb

<header class="navbar navbar-fixed-top navbar-inverse"> 
    <div class="container"> 
    <%= link_to "Birder's Life List App", root_path, id: "logo" %> 
    <nav> 
     <ul class="nav navbar-nav navbar-right"> 
     <li><%= link_to "Home", root_path %></li> 
     <li><%= link_to "Help", help_path %></li> 
      <% if logged_in? %> 
      <li><%= link_to "Users", '#' %></li> 
      <li class="dropdown"> 
      <a href="#" class="dropdown-toggle" data-toggle="dropdown"> 
       Account <b class="caret"></b> 
      </a> 
      <ul class="dropdown-menu"> 
       <li><%= link_to "Profile", current_user %></li> 
       <li><%= link_to "Settings", '#' %></li> 
       <li class="divider"></li> 
       <li> 
       <%= link_to "Log out", logout_path, method: "delete" %> 
       </li> 
      </ul> 
      </li> 
     <% else %> 
      <li><%= link_to "Log in", login_path %></li> 
     <% end %> 
     </ul> 
    </nav> 
    </div> 
</header> 

在此先感谢。

回答

0

我已经解决了这个问题。 我发现这个职位:http://www.erikminkel.com/2013/09/01/twitter-bootstrap-3-in-a-rails-4-application/

,我跑

bundle exec rake assets:precompile RAILS_ENV=development 

然后我检查了我的application.js文件,发现我在某种程度上改变了

//= require bootstrap 

//= bootstrap 

我知道我有这个正确的,当我有问题之前,所以我不瘦k这是下拉问题的原因。

资产管道上的RailsGuide提到了rake资产:在生产环境中进行预编译。我一直未能得到

bin/rake assets:precompile 

要工作。