erb 相关问题

ERB是一个简单的Ruby模板系统,可以在任何纯文本文档中嵌入代码。它通常用于Web框架中的HTML生成(例如Ruby on Rails)。

在 ruby 中将文本转换为粗体

我创建了一个简单游戏,同时拥有控制器和视图。 这是我的功能: 定义分数 @字母=参数[:字母] @word = params[:word].upcase if !compsrison?(@word.split(''), @

回答 1 投票 0

来自引用其他部分的部分的相对路径

我正在使用(主要)部分: <%= render partial: 'shared/page/head' %> 它利用了其他(次要)部分: <%= render partial: 'shared/page/head/title' %>...

回答 3 投票 0

当使用哈希作为 ERB 模板时,ruby 抱怨“编码”

就这么简单 需要“erb” a =“això és una merda <%=rand(1..20)%>” c = {"id" => "això és una merda <%=rand(1..10)%>"} 如果您运行 ERB.new(a).result,...

回答 1 投票 0

Ruby on Rails 7:验证 collection_check_boxes 数组

在 Rails 中,我有一个名为 Post 的模型,其中有一个名为 columns 的字段。用户可以选择要显示的列。我在表单中使用以下代码行来执行此操作: <%= form.

回答 1 投票 0

检查是否使用 Rails 启用了 Javascript(服务器端)

如何检查 Rails 中是否启用了 javascript?这样我就可以在视图中做这样的事情: <% if javascript_enabled? %> Javascript已启用!<... 如何检查 Rails 中是否启用了 javascript?这样我就可以在视图中做这样的事情: <div> <% if javascript_enabled? %> <p>Javascript Enabled!</p> <%- else -%> <p>No Javascript</p> <%- end -%> </div> 你可以检测到它,但它并不漂亮。 首先,您需要一个新控制器,其操作可更新会话中的超时: class JavascriptController < ApplicationController def confirm session[:javascript_updated] = Time.now end end 接下来,您需要在所有页面中包含一个 javascript 操作,以便在每次页面加载时调用此控制器操作。最简单的方法是将其包含在布局中包含的“javascript-confirm.js”文件中(在这个特定示例中,我使用了 Prototype 的 Ajax.Request,因此您也需要将其包含在您的 javascript 中): function confirmJavascript() { // Assuming you are using Prototype new Ajax.Request('/JavascriptController/confirm'); } myTimeoutFunction(); setInterval(myTimeoutFunction, 10000); // invoke each 10 seconds 这将在您的所有页面视图中调用确认操作。最后,您必须控制自应用程序控制器中上次确认以来经过了多长时间。 class ApplicationController < ActionController::Base JAVASCRIPT_TIME_LIMIT = 10.seconds before_filter :prepare_javascript_test private def prepare_javascript_test if (session[:javascript_updated].blank? or Time.now - session[:javascript_updated] > ApplicationController::JAVASCRIPT_TIME_LIMIT) @javascript_active = true else @javascript_active = false end end end 现在,您的所有控制器中都会有一个名为 @javascript_active 的变量。 即使用户激活/停用 javascript,它也应该工作,精度为 10 秒。如果您的某些页面加载时间超过 10 页(即包含大量图像),它可能不起作用。在这种情况下增加时间限制(在应用程序控制器和您的 JavaScript 上) 免责声明:我还没有测试过这段代码,可能潜伏着一些错误 - 但它应该为您指明正确的方向。 如果这就是你想要的全部,最好将非 JS 版本放在视图中: <p class="replace_by_js">No Javascript</p> 然后用 Javascript 替换它:(我使用 jQuery) $('p.replace_by_js').replaceWith("<p>Javascript Enabled!</p>") 这种方法应该适用于您想要添加的几乎任何渐进增强功能。 无需编写大量代码来检查 JavaScript 是否启用,您只需在页面布局中编写为(使用 HAML)- %p.javascript_require No javascript, please enable JavaScript 并让你的 JavaScript 使用 hide() 函数隐藏该段落 - $(".javascript_require").hide(); 当 javascript 被禁用时,执行您想要执行的任何功能。 在渲染响应期间这是不可能的。确定可靠性较低或较高的唯一方法是让客户端在之前的请求之一中预先发送 ajaxical 请求。然后,这个ajaxal请求应该在服务器端会话中设置一些令牌,该令牌标识客户端已经事先发送了ajaxal请求(从而证明客户端启用了JS)。但这并没有涵盖客户端可以在会话期间同时禁用 JS 的可能性。或者您必须在每次响应后收集时间戳和 ajaxical 请求。这并不是您真正想做的事情。 而是渲染这两种内容并使用 <noscript> 和 <script> 标签来切换其中一个或另一个。另请参阅我的回答,了解几个示例:与<noscript>相反。 您无法在服务器端检测到它。事实上,第一次访问页面时脚本可能会被关闭,然后浏览器设置发生更改并重新导航,而无需发出新的 HTTP 请求。更不用说各种缓存问题以及脚本在技术上可能“启用”但由于冲突、错误或“安全”工具妨碍而无法工作的地方。 因此,您需要在客户端做出有关带脚本/不带脚本内容的所有决定。如今,首选方法通常是“渐进式增强”:在页面上包含基本的 HTML 版本,然后让 JavaScript 在可能的情况下替换/升级它: <div id="isitjs"> <p>Backup content for no JavaScript</p> </div> <script type="text/javascript"> document.getElementById('isitjs').innerHTML= '<p>Sparkly script-enhanced content!<\/p>'; // or DOM methods, as you prefer </script> 你可以做一些像这样的hacky,但是你的“启用javascript”的html需要在助手中生成 将其放入您的 application_helper.rb 中 def javascript_enabled? content_tag(:div, [ content_tag(:script, 'document.write("Javascript Enabled")'), content_tag(:noscript, 'No Javascript') ]) end 这在你看来是: <%= javascript_enabled? %> 您无法从服务器端检查是否启用了 Javascript,但是,您可以在站点之前设置一个页面,并使用指示是否启用 Javascript 的参数重定向到您的应用程序。请参阅下面的示例代码: <html> <head> <meta HTTP-EQUIV="REFRESH" content="2; url=./Login.action?javascriptEnabled=false"> <link rel="icon" href="favicon.ico" type="image/x-icon"/> <link rel="shortcut icon" href="favicon.ico" type="image/x-icon"/> <title></title> </head> <body onload="window.location.href='./Login.action?javascriptEnabled=true'" ></body> </html> 因此,如果启用了 Javascript,则 onload 重定向将起作用,如果没有,则标头元标记将起作用。 诀窍是在元标记重定向上放置 1-2 秒的延迟,因此如果 javascript 重定向不会重定向,元标记会重定向,表明没有启用 JavaScript。 代码少了一点(只有 1 行,只有 1 个文件),但与 Peter 的响应类似 - 将其添加到您的 layouts/application.html.haml 中: %script document.write("JavaScript已启用")

回答 8 投票 0

向我的 .js.erb 文件添加 div 标签时,Ajax 功能似乎失败

我正在我的代码中做一些样式设置,我想在我的应用程序中的群组论坛上显示消息发布的时间。目前该论坛中发布的每条消息都支持 AJAX 功能

回答 3 投票 0

Ruby on Rails 条件渲染不起作用

这是我的考勤控制器中mark_attendance方法的一部分。该方法在扫描二维码后调用,如果 my_student_course.size > 1,则应显示模式。 `如果讲师

回答 1 投票 0

使用 erb 模板和 sidekiq

我同时使用 sinatra 和 sidekiq。我正在尝试从 sidekiq 工作程序中渲染 erb 模板,但我得到了一个未定义的方法“erb”。在我看来,事情应该有效,因为 sidekiq 是......

回答 2 投票 0

如何将实例变量传递到 Sinatra 路由中的 erb 模板?

如何将实例变量传递到 Sinatra 路由中的 erb 模板。下面的不行。 得到 '/' 做 @beercompany =“库尔斯” erb:我的模板 结尾 我的寺庙...

回答 1 投票 0

在 Rails 7.1 中使用 Markdown 中的 ERB 和 Redcarpet

我正在尝试在 Rails 7.1.1 应用程序中添加 Markdown 支持。 Redcarpet gem 版本是 3.6.0。 我遵循这个问题的建议: 在 Redcarpet 中使用 Markdown 中的 ERB 我当前的代码(在/config/initiali...

回答 1 投票 0

无需 JavaScript 即可动态显示 f.text_field 中的格式化值

在数据库中,价格以美分存储,并且很容易以正确的格式显示它们,但是当我尝试使用 text_field 帮助程序时,似乎没有办法将钱格式化为.. .

回答 1 投票 0

有没有办法让点击button_冒泡到父元素?

这是我的代码: ... <%= button_to '2 Hours', set_eta_order_path(@order), method: :post, params: { ... 这是我的代码: ... <div data-action="click->eta#advance" data-value="2hr"> <%= button_to '2 Hours', set_eta_order_path(@order), method: :post, params: { ... } %> </div> ... (repeated several times as a list) 单击按钮时可以工作,但事件不会向上冒泡到 div,因此不会调用 div 上的事件处理程序。 有一个这些 div 的列表作为民意调查的选项,并且每个 div 在单击时都应前进到下一页并保存您单击的结果。问题在于,民意调查的页面几乎完全在客户端中呈现(每个页面没有不同的路由),并使用 Stimulus.js 进行处理,并在服务器中保存结果。 有没有办法让这个布局与自身兼容,如果没有,有什么解决方法吗? 您必须声明您的data-controller: <div data-controller="eta"> <div data-action="click->eta#advance" data-eta-time-param="1hr"> <%= button_to "1 Hour", set_eta_order_path(@order) %> </div> <div data-action="click->eta#advance" data-eta-time-param="2hr"> <%= button_to "2 Hours", set_eta_order_path(@order) %> </div> </div> // app/javascript/controllers/eta_controller.rb import { Controller } from "@hotwired/stimulus" // Connects to data-controller="eta" export default class extends Controller { advance(event) { console.log(event.params); } }

回答 1 投票 0

创建客户时出现条带错误:您为“卡”传递了一个空字符串

Stripe 不接受付款,收费一直失败。我收到此错误: 于 2014-06-09 06:30:58 -0700 开始对 127.0.0.1 发布“/charges” 由 ChargesController#create as HTM 处理...

回答 3 投票 0

在 VSCode 中添加 Heredoc 语法高亮

我有一个 Rails 项目,在其中使用视图组件。在大多数组件内,我有一个 erb_template HEREDOC,它使用 ERB 模板化 HTML 定义组件标记。 当我设置 HEREDOC

回答 1 投票 0

WickedPDF 模板 image_tag / wicked_pdf_image_tag 不适用于仅 Rails API

我正在尝试使用 Wicked PDF 生成 PDF。到目前为止,一切顺利,但当我尝试添加图像时,我得到的都是空白框。我的图像位于 ../app/assets/images/foo.png 和 ../public/images...

回答 4 投票 0

erb 如何在数组上循环

我不能简单地使用 ruby erb 模板系统循环数组...... 这是我的模板: <% ['foo', 'bar'].each do |val| -%> <%= val %> <% end -%> 这是命令行和

回答 2 投票 0

如何使用Rails API设置根路由?

我使用 --api 标志创建了一个 Rails API。 我想使用自定义 HTML 文件设置根路由。 这是我的routes.rb: Rails.application.routes.draw 做 命名空间:api 做 命名空间:v1 做

回答 3 投票 0

是否可以在 YAML 中与 ERB 一起使用三元运算符,如果可以的话如何?

我一直在尝试下面的许多语法变体,但除了语法错误之外无法得到任何东西(简单的 erb 插值可以自行工作,但逻辑三元运算符会抛出语法

回答 1 投票 0

Notepad++ 没有语法突出显示我的文件

直到一周前,我还很高兴在 Notepad++ 中使用语法突出显示编写 html.erb 文件。然后我的硬盘坏了。 我在新系统上重新安装了 Notepad++,但是当我打开 html.erbs 时,仅......

回答 10 投票 0

如何将数据子到变量名中,Ruby?

所以我有 LanRole.where("lan_id = ?", requestable.id).each do |lan_role| %> <% @lan_??? = Lan.find(lan_role.lan_id) %> 所以我有 LanRole.where("lan_id = ?", requestable.id).each do |lan_role| %> <% @lan_??? = Lan.find(lan_role.lan_id) %> <li><a data-toggle="tab" href="#lan_info_<%= lan.id %>"><%= lan.name %> INFO</a></li> 其中???应该是lan_role.id,以便我稍后可以将其放入选项卡中 <div class="tab-content"> <div id="lan_info_<%= lan.id %>" class="tab-pane fade"> <h4><%= @lan_???.name %> INFO</h4> etc </div> 但我不知道如何创建变量变量名,将其子在那里。 如果是字符串,我可以做 #{lan_role.id} 但它不是字符串。 ...我看错了错误,它在<div id="lan_info_<%= lan.id %>" class="tab-pane fade"> ActionView::Template::Error (undefined local variable or method `lan' for #<#<Class:0x007f7afb9e98a0>:0x007f7afb28aeb0>): 对于“变量”变量: {one: 1, two: 2, three: 3}.each do |name, id| instance_variable_set("@lan_#{name}", [id, name]) p @lan_one, @lan_two, @lan_three end [1, :one] nil nil [1, :one] [2, :two] nil [1, :one] [2, :two] [3, :three] 但是由于您要制作选项卡,因此只需两个循环,一个用于链接,一个用于正文: collection = LanRole.where("lan_id = ?", requestable.id) # make tabs collection.each do |role| role.name end # make tab contents # collection is now loaded it won't hit the database again, at least it shouldn't collection.each do |role| role.description end

回答 1 投票 0

© www.soinside.com 2019 - 2024. All rights reserved.