Rails - 引导设置
Posted
技术标签:
【中文标题】Rails - 引导设置【英文标题】:Rails - Bootstrap setup 【发布时间】:2016-02-27 10:15:37 【问题描述】:我正在尝试让 bootstrap javascript 在我的 rails 4 应用程序中工作。
我问了这些问题,但没有得到任何帮助。
https://***.com/questions/33685338/rails-with-bootstrap-tabs
https://***.com/questions/33852687/rails-4-bootstrap-date-picker
我越来越感到被这个挑战打败了。令人沮丧的是,bootstrap 被描述为一个简单的 rails 工具。如果有人可以帮助解决这个问题,我很乐意支付 100 美元。
我的问题特别出在 javascript 函数上。我的标签不起作用。当您单击链接时,没有任何反应。此外,日期选择器不起作用(我希望日历可以通过单击来选择日期)。
在我的 gem 文件中,我有:
gem 'sass-rails', '~> 5.0'
gem 'bootstrap-sass', '~> 3.3.5'
gem 'font-awesome-sass', '~> 4.4.0'
gem 'bootstrap-slider-rails'
gem 'bootstrap-datepicker-rails'
gem 'jquery-rails'
在我的 application.html.erb 中,我有:
<link href='http://fonts.googleapis.com/css?family=Quicksand|Roboto:300' rel='stylesheet' type='text/css'>
<link href='http://fonts.googleapis.com/css?family=Noto+Sans' rel='stylesheet' type='text/css'>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="p:domain_verify" content="44c82789b3dcecac427e4b65123fb68d"/>
<title><%= content_for?(:title) ? yield(:title) : "RE" %></title>
<meta name="description" content="<%= content_for?(:description) ? yield(:description) : "Ae" %>">
<%= stylesheet_link_tag "application", media: "all", "data-turbolinks-track" => false %>
<%= javascript_include_tag "application", "data-turbolinks-track" => false %>
<%= csrf_meta_tags %>
<%= favicon_link_tag %>
<script src="https://www.google.com/jsapi"></script>
<script src="https://www.youtube.com/iframe_api"></script>
Turbolinks 已关闭,因为我使用 olark。
在我的样式表文件夹中,我有文件名为:
application.css.scss:
*= require_framework_and_overrides.css.scss
*= require bootstrap-datepicker
*= require_self
*= require_tree .
*/
按照下面列出的 cmets,我将此文件更改为名为 application.scss 并更改了顺序和引用:
*= require_tree .
*= require_self
*= require framework_and_overrides.css.scss
*= require bootstrap-datepicker
*/
framework_and_overrides.css.scss
@import "bootstrap-sprockets";
@import "bootstrap";
@import "font-awesome-sprockets";
@import "font-awesome";
@import "bootstrap-slider";
在我的 javascript 文件夹中,我有一个名为:
application.js:
//= require jquery
//= require jquery_ujs
//= require underscore
//= require gmaps/google
//= require bootstrap-slider
//= require bootstrap-sprockets
//= require bootstrap-datepicker
//= require_tree .
project_dates.coffee.js
$(document).on "focus", "[data-behaviour~='datepicker']", (e) ->
- $(this).datepicker
- format: "dd-mm-yyyy"
- weekStart: 1
- autoclose: true
然后,在我看来,我正在尝试使用引导选项卡,以便单击选项卡会在链接栏下方呈现部分内容:
<div class="containerfluid">
<div class="row" style="margin-top:50px">
<div class="col-xs-10 col-xs-offset-1">
<ul class="nav nav-tabs nav-justified">
<li role="presentation" class="active"> <a href="#terms" aria-controls="terms" role="tab" data-toggle="tab">Terms</a></li>
<li role="presentation"> <a href="#privacy" aria-controls="privacy" role="tab" data-toggle="tab">Privacy</a></li>
<li role="presentation"> <a href="#licence" aria-controls="licence" role="tab" data-toggle="tab">Licence</a></li>
<li role="presentation"> <a href="#trust" aria-controls="trust" role="tab" data-toggle="tab">Trust</a></li>
<li role="presentation"> <a href="#reliance" aria-controls="reliance" role="tab" data-toggle="tab">Reliance</a></li>
<li role="presentation"> <a href="#pricing" aria-controls="pricing" role="tab" data-toggle="tab">Pricing</a></li>
</ul>
</div>
</div>
<div class="row">
<div class="col-xs-10 col-xs-offset-1">
<div class="intpolmin" style="margin-top: 50px; margin-bottom: 30px">
We give meaning to other words used in these terms and policies throughout, and identify those words as having an ascribed meaning, with <em>emphasised</em> text.
</div>
</div>
</div>
<div class="row">
<div class="col-xs-8 col-xs-offset-2">
<div class="tab-content">
<div role="tabpanel" class="tab-pane active" id="terms"><%= render 'pages/legalpolicies/terms' %></div>
<div role="tabpanel" class="tab-pane" id="privacy"><%= render 'pages/legalpolicies/privacy' %></div>
<div role="tabpanel" class="tab-pane" id="licence"><%= render 'pages/legalpolicies/licence' %></div>
<div role="tabpanel" class="tab-pane" id="trust"><%= render 'pages/legalpolicies/trust' %></div>
<div role="tabpanel" class="tab-pane" id="reliance"><%= render 'pages/legalpolicies/reliance' %></div>
<div role="tabpanel" class="tab-pane" id="pricing"><%= render 'pages/legalpolicies/pricing' %></div>
</div>
</div>
</div>
</div>
当您点击链接时,什么都不会发生。
在我的项目日期表单中,我有这个表单域:
<%= f.date_select :start_date, :label => "When does this project begin?", 'data-behaviour' => 'datepicker', order: [:day, :month, :year] %>
它不会生成日期选择器。相反,它只是 d/m/y 的三个单独字段。此外,标签不显示 - 但我可以解决这个问题。
我的设置有问题吗?
当我将 application.js 更改为删除时:
//= require bootstrap
然后 js 工作,因此当您单击顶部的选项卡链接之一时,它会跳下一长页文本到相关文本开始的位置。那不是我想要的。我想单击选项卡链接,并为此导致相关部分呈现在链接下方(以及所有其他部分不呈现)。
对 application.js 的更改不会导致日期选择器问题发生变化
当我尝试添加时:
Bundler.require(:default, Rails.env)
到我的 config/application.rb(根据这篇文章 Bootstrap-sass gem Javascript not Working in Rails 4)
我没有得到与上述问题不同的结果
当我尝试添加时
//= require bootstrap-sprockets
到我的 application.js(在 jquery 之后),js 停止工作 - 所以当我单击选项卡菜单中的链接时,什么都没有发生
我知道https://github.com/twbs/bootstrap-sass 的用户指南说:
bootstrap-sprockets and bootstrap should not both be included in application.js.
因此,我从 application.js 中删除了引导程序。
我也知道该 gem 的用户指南说:
Do not use *= require in Sass or your other stylesheets will not be able to access the Bootstrap mixins or variables.
我的 application.css.scss 中还有这个:
*= require_framework_and_overrides.css.scss
*= require bootstrap-datepicker
*= require_self
*= require_tree .
*/
我阅读 gem 文档的意思是我将这些需要文件保存在我的 css 中做错了 - 但 gem 文档并没有告诉你改用什么。
上面写着:
Then, remove all the *= require_self and *= require_tree . statements from the sass file. Instead, use @import to import Sass files.
你是怎么做到的?
整个 gem 文件复制如下:
source 'https://rubygems.org'
# ------------------ Bundle edge Rails instead: gem 'rails', github: 'rails/rails'
gem 'rails', '4.2.4'
# ------------------ Use postgresql as the database for Active Record
gem 'pg'
# ------------------ Use SCSS for stylesheets
gem 'sass-rails', '~> 5.0'
gem 'bootstrap-sass', '~> 3.3.5'
gem 'font-awesome-sass', '~> 4.4.0'
gem 'bootstrap-slider-rails'
gem 'bootstrap-datepicker-rails'
# ------------------ Use Uglifier as compressor for JavaScript assets
gem 'uglifier', '>= 1.3.0'
# ------------------ Use CoffeeScript for .coffee assets and views
gem 'coffee-rails', '~> 4.1.0'
# ------------------ See https://github.com/rails/execjs#readme for more supported runtimes
gem 'therubyracer', platforms: :ruby
# ------------------ Use jquery as the JavaScript library
gem 'jquery-rails'
# ------------------ Turbolinks makes following links in your web application faster. Read more: https://github.com/rails/turbolinks
# gem 'turbolinks'
# ------------------ Build JSON APIs with ease. Read more: https://github.com/rails/jbuilder
gem 'jbuilder', '~> 2.0'
# ------------------ bundle exec rake doc:rails generates the API under doc/api.
gem 'sdoc', '~> 0.4.0', group: :doc
# ------------------ Use ActiveModel has_secure_password
gem 'bcrypt', '~> 3.1.7'
# ------------------ Use Unicorn as the app server
# gem 'unicorn'
# ------------------ Use Capistrano for deployment
# gem 'capistrano-rails', group: :development
# ----------- USERS
# ------------------ authentication
gem 'devise', '3.4.1'
gem 'devise_zxcvbn'
gem 'omniauth'
gem 'omniauth-oauth2', '1.3.1'
gem 'omniauth-google-oauth2'
gem 'omniauth-facebook'
gem 'omniauth-twitter'
gem 'omniauth-linkedin-oauth2'
gem 'google-api-client', require: 'google/api_client'
# gem 'oauth2'
# ------------------ authorisation
gem 'pundit'
# ------------------ user roles
# ------------------ messaging
# ------------------ money
gem 'money-rails'
# ----------- CONTENT
gem 'state_machine'
gem 'acts_as_approvable'
# ------------------ file uploads
gem 'carrierwave'
gem 'mini_magick'
gem 'simple_form'
# ------------------ video
gem 'yt', '~> 0.25.5'
gem 'vimeo'
# ------------------ organisation
gem 'acts-as-taggable-on', '~> 3.4'
# ------------------ search
# ----------- OTHER
# ------------------ security
gem 'figaro'
# ------------------ performance
gem 'rails-observers'
gem 'high_voltage', '~> 2.4.0'
# ------------------ location
gem 'geocoder'
gem 'gmaps4rails'
gem 'underscore-rails'
gem 'country_select'
group :development, :test do
# Call 'byebug' anywhere in the code to stop execution and get a debugger console
gem 'byebug'
end
group :development do
# Access an IRB console on exception pages or by using <%= console %> in views
gem 'web-console', '~> 2.0'
# Spring speeds up development by keeping your application running in the background. Read more: https://github.com/rails/spring
gem 'spring'
end
group :production do
gem "rails_12factor"
end
ruby "2.2.2"
观看此视频 - https://gorails.com/episodes/styling-with-bootstrap-sass
设置看起来超级简单,但是本教程没有修改文件以删除对 require 的引用,正如 gem 文档所建议的那样(但我还没有这样做),但本教程仍然可以让引导程序正常工作。有什么人可以看到我可以尝试的吗?濒临崩溃……
如您所见 - 我已经为此尝试了一年多。我参加了每月一次的聚会、付费的代码导师和聘请的无法提供帮助的承包商。希望在这个板上出现奇迹。 Bootstrap Sass with Rails 4
尝试以下救援解决方案:
所以,我现在有:
样式表如下:
application.css
*= require_tree .
*= require_self
*/
custom.css.scss
@import "bootstrap-sprockets";
@import "bootstrap";
framework_and_overrides.css.scss:
@import "font-awesome-sprockets";
@import "font-awesome";
@import "bootstrap-slider";
javascript文件如下:
application.js
//= require jquery
//= require jquery_ujs
//= require bootstrap
//= require_tree .
application.html.erb:
<%= stylesheet_link_tag "application", media: "all", "data-turbolinks-track" => false %>
<%= javascript_include_tag "application", media: 'all', "data-turbolinks-track" => false %>
宝石文件:
gem 'sass-rails', '~> 5.0'
gem 'bootstrap-sass', '~> 3.3.5.1'
gem 'font-awesome-sass', '~> 4.4.0'
gem 'bootstrap-slider-rails'
gem 'bootstrap-datepicker-rails'
当我保存所有这些并完成建议的步骤时,上述内容没有任何变化。我单击顶部的选项卡链接中的一个链接,屏幕底部的小框显示“转到此页面上的#[链接选项卡名称],但没有任何反应。
【问题讨论】:
您的调试控制台(例如萤火虫)有什么要说的?我认为文件没有正确加载。你能确认函数 datepicker 存在于渲染的 .js 中吗? (查看您的应用程序主页的源代码,然后单击第一个 olark gem 3 年未更新。我会删除它并在没有它的情况下运行测试。 当我在主页点击查看源代码时,我得到这个错误:$(document).on "focus", "[data-behaviour~='datepicker']", (e) -> - $(this).datepicker - 格式:“dd-mm-yyyy” - weekStart: 1 - autoclose: true 虽然当我删除 project_dates.js 文件时,我在源代码查看器中没有收到任何错误,但是页面之间的选项卡不起作用 - 当您单击它们时,除了底部的选项卡之外什么也没有发生屏幕的显示我给每个链接的 href 名称 当我重新打开 turbo 链接并重新安装该 gem、捆绑并重新启动服务器时,这些链接在引导选项卡中仍然不起作用 【参考方案1】:您正处于配置地狱中,而我已经构建了一个最小的工作产品来帮助您摆脱困境。为了实现这一点,我们会按出现的顺序解决您的问题,而不是尝试并行解决它们。此答案侧重于您的第一个问题,并且可能解决其他问题。
项目的自述文件副本如下。如果您需要访问该产品,请告诉我。
自述文件
这是一个演示应用程序,可帮助 ***user "user2860931" 解决问题 如此处所述。
问题按时间顺序排列:
[Q1] 11 月 13 日 Rails with Bootstrap Tabs
[Q2] 11 月 22 日 Rails 4 - Bootstrap date picker
[Q3] 11 月 24 日 Rails - Bootstrap setup
问题描述
已进行了许多配置尝试,但开发并不理想 环境可能通过添加文件中断了 Rails 命名约定 扩展。
使用的版本
导轨 4.2.5
自行创建此应用程序的步骤
首先检查合适的 Rails 版本
$ rails --version
确保开发环境(IDE)不会自行添加文件扩展名
创建一个新的 Rails 应用程序
$ rails new rescue
找到1.下创建的应用程序的Gemfile并注释掉 turbolinks gem 条目 删除说明链接以使视觉清晰
将以下行添加到您的 Gemfile(可能需要将 gem 修复到 特定版本,以避免应用程序停止工作 计划外更新,但这是另一个问题)
gem 'bootstrap-sass' #, '3.3.5.1'
运行
$ bundle exec bundle update
$ bundle exec bundle install
创建文件 app/assets/stylesheets/custom.css.scss 并添加以下内容 行:
@import "bootstrap-sprockets";
@import "bootstrap";
将以下行添加到 app/assets/javascripts/application.js
//= require bootstrap
重要提示:此行必须遵循 jquery 和 jquery-ujs 的行以及 在 require_tree 指令之前,以便生成的文件如下所示:
//= require jquery
//= require jquery_ujs
//= require bootstrap
//= require_tree .
注意:我们删除了 turbolinks 行,以反映生产
用户“user2860931”的系统设置(***)。
保存所有编辑好的文件后,检查开发环境是否 已更改文件扩展名(只是为了确保这次)
.
├── app
│ ├── assets
│ │ ├── images
│ │ ├── javascripts
│ │ │ └──application.js
│ │ └── stylesheets
│ │ ├── application.css
│ │ └── custom.css.scss
生成一个最小控制器以及动作和相关视图
$ rails generate controller planets index
启动服务器
$ rails s
在您的浏览器中访问
@987654324@
彻底删除turbolinks的最后一步
查看11中提到的站点的HTML源代码。
从文件 app/views/layouts/application.html.erb 删除所有 data-turbolinks-track 属性,以便 ERB 代码如下所示:
<%= stylesheet_link_tag 'application', media: 'all' %>
<%= javascript_include_tag 'application' %>
重复第 1 步,注意区别
访问文件 app/views/planets/index.html.erb 并替换为您的 HTML 如 [Q1] 中所列
此设置会在正确的选项卡面板下呈现您的部分。请注意 你在 Rails 的开发环境中工作。打电话给
$ rake assets:clean
$ rake assets:precompile
在部署主项目后可能需要查看更改(在 Rails 开发模式下不需要)。
提示:使用模拟数据文件作为渲染函数的参数。
app
│ └── views
│ │
│ └── planets
│ ├── _dummy00.html.erb
│ ├── _dummy01.html.erb
│ ├── _dummy02.html.erb
│ ├── _dummy03.html.erb
│ ├── _dummy04.html.erb
│ ├── _dummy05.html.erb
并在 Q1 的 HTML 中使用对 render 'planets/dummy05'
的调用。确保每个虚拟文件包含略有不同的数据,以便能够检查工作选项卡。
模型结果通过引导程序提供选项卡,看起来像这样。
标签按预期工作。
通过为您提供最小的工作产品,您应该能够将您的设置带入工作状态。
在所有准备工作之后,只需按照官方文档添加一个日期选择器即可,回答Q2:
用于提供此答案的来源
https://www.railstutorial.org/ by Michael Hartl
http://getbootstrap.com/components/#nav
http://getbootstrap.com/javascript/#tabs
http://getbootstrap.com/javascript/#tabs-usage
http://guides.rubyonrails.org/asset_pipeline.html
【讨论】:
我对此充满希望。我无法再启动服务器来检查任何内容。我收到此错误:rails server bin/rails:6: warning: already initialized constant APP_PATH。我认为这可能与我试图让第 1 步正常工作的步骤之一有关。我将尝试解决该错误,然后再回来再试一次。 @user2860931:如果您正在使用这个答案并且真的是从头开始创建一个新项目,那么 1. 停止服务器 2. 运行命令“spring stop” 3. 检查命令“ps aux | grep -i spring" 如果还有一些相关进程正在运行。 4.从答案中的步骤(1)重新开始。你可以这样做。 服务器没有运行。我无法启动它。 @user2860931,好的 - 看起来你不再在线了。以下是您应该如何进行:不要试图立即将我的答案合并到您的主项目中,而是单独构建它并取得成功。 只有你才会进入你的主项目,使用你的版本控制系统并检查一个已知的工作状态,并结合你通过构建虚拟应用程序所取得的成就。您不要尝试一次性完成所有工作,但一次只做一件事。 @user2860931 不要这样想。我从 14 岁开始编程,或者大约 18 年(我是一名 php 程序员并切换到 Ruby/Rails)。然而,当我几年前开始使用 Rails 和 Bootstrap 时,我有同样的感受和非常相似的挫败感。对于任何学习新事物的人来说,这都是正常的。 “一分耕耘一分收获”,还记得吗? :) 无论如何,我将做与@benjamin 所做的完全相同的事情,并构建一个最小的工作版本。所以我建议:1)@benjamin,把它放到 GitHub 上进行协作怎么样? 2) @user2860931 一次一步很关键,尤其是在开始的时候。`【参考方案2】:我遇到了与您相同的问题,并找到了适合我的解决方案(在深网中挖掘)。尝试在.css
文件中的require_tree .
行之后添加要求,并在.js
文件中仅添加您使用的datepicker;如下:
application.css
...
*= require_tree .
*= require_self
*= require bootstrap
*= require bootstrap-datepicker
*/
application.js
...
//= require jquery
//= require jquery_ujs
//= require bootstrap
//= require_tree .
//= require bootstrap-datepicker
它与Ruby on Rails的资产管道有关,您可以在此页面http://guides.rubyonrails.org/asset_pipeline.html中进一步讨论此主题,但首先尝试更改行的顺序。
【讨论】:
您好 Juan,我尝试实施您的建议。第一个错误出现在 application.css.scss - 说找不到引导程序。我尝试用引导链轮替换它并得到同样的错误。我尝试删除引导引用(因为我通过我的框架导入引导链轮和引导并覆盖 css 文件。加载,但 js 在选项卡上不起作用。 使用rails gem时无需下载文件以上是关于Rails - 引导设置的主要内容,如果未能解决你的问题,请参考以下文章