我正在开发一个Rails引擎,所以我对现有的引擎进行了一些研究.我注意到,其中不乏有在文件中app,而且在lib和vendor.
我很清楚,我应该将任何应该由主机应用程序替换的代码放入app文件夹中(例如,当拥有模型时app/user.rb,主机应用程序可以轻松拥有自己的app/user.rb文件并使用此文件而不是引擎程序).
但我不确定,当我必须把东西放进去lib,什么时候进去vendor?我想,在vendor那里,我只应该把其他开发人员或项目中的"外部"代码放在我想要在我的项目中使用的代码中,并且lib我将自己的其他库放在项目中.但是,例如,为什么WiceGrid会将内容放入其wice_grid/vendor/assets目录中?它看起来不像外部代码,但是只为WiceGrid开发的代码应该在lib目录中?
更新
在尝试一下时,我注意到lib在开发引擎时没有重新加载文件夹中的所有代码(我猜这个vendor目录的情况也是如此),所以我应该将它们放入一个文件夹中app,但究竟在哪里呢?
例如,我有一个文件lib/iq_list_controller.rb,其中包含一些类和实例方法ApplicationController,我将其混合到其中,engine.rb如下所示:
initializer "wice_grid_railtie.configure_rails_initialization" do |app|
ActiveSupport.on_load(:action_controller) do
extend IqList::Controller::ClassMethods
include IqList::Controller::InstanceMethods
end
end
Run Code Online (Sandbox Code Playgroud)
我应该把这个文件放在哪里,以便Ruby正确找到它?
我通常不使用表格来表单,但是当使用嵌套表单时(使用nested_form或cocoon gem时),是否可以将每组表单元素放在表格行中?
对我来说,这看起来非常直观:表中的每一行代表一个对象.但是默认情况下,nested_form和cocoon gem都没有在它们的示例中添加表,所以我想知道使用表单是不是最好的方法?
有时我的Rails应用程序的一些规格似乎随机失败,因为突然英语不再是默认语言,而是德语:
expected: "Project test customer - Project test name (Audit, Access for all, 2015-06-15).pdf"
got: "Project test customer - Project test name (Audit, Zugang für alle, 2015-06-15).pdf"
Run Code Online (Sandbox Code Playgroud)
可以看出,"人人享有"这一部分突然间是"Zugangfüralle".我搜索了一个解决方案,它似乎I18n.locale是一个全局对象,所以当它在规范中发生变化时,它会持续存在.
问题并不总是发生,但我可以在指定这样的种子时重现它:rspec --seed 51012.因此,在某些其他规范之前(或之后)执行规范似乎确实存在一些问题.
我有一个功能规范,测试是否可以更改语言环境,如下所示:
it 'offers contents in german' do
visit root_path(locale: :de)
expect(page).to have_content 'Willkommen'
end
Run Code Online (Sandbox Code Playgroud)
我怀疑这可能是有问题的规范,当它提前运行时,它会影响其他规格.
我希望我可以通过将规范中的语言设置回默认值来解决它,如下所示:
it 'offers contents in german' do
visit root_path(locale: :de)
expect(page).to have_content 'Willkommen'
I18n.locale = :en
end
Run Code Online (Sandbox Code Playgroud)
没工作,这个也没有:
it 'offers contents in german' do
visit root_path(locale: :de)
expect(page).to have_content …Run Code Online (Sandbox Code Playgroud) 我在我的网页中有盲人和键盘用户的跳转链接,这些用户被移出视口以便在视觉上隐藏它们; 当他们获得焦点时,他们会被移动到视口中.
我想使用RSpec和Capybara测试这种行为,但它不知何故不起作用.
it 'moves the focus to the navigation when activating the corresponding link', js: true do
expect(page).not_to have_css '#main:focus'
page.evaluate_script "$('#jump_to_content > a').focus()"
click_link 'Jump to content'
expect(page).to have_css '#main:focus'
end
Run Code Online (Sandbox Code Playgroud)
JavaScript in evaluate_script似乎没有正确执行.我$('#jump_to_content > a').focus()在Chrome控制台中尝试了相同的JS(),我对结果有点不确定,因为在控制台中,链接没有出现,但是当点击进入浏览器视图时,它出现了部分一秒钟又消失了(它消失了,因为它不再具有焦点).在我看来,它应该在执行JS后直接显示.
这让我对这一切有点不安全.任何帮助都非常感谢.
更新
我同时得出结论,Chrome的行为是正常的:焦点保留在控制台中,因此该元素实际上并没有真正获得焦点而且没有显示.
我还得出结论,Capybara似乎无法正确处理元素(并应用:focus样式).
我创建了以下CSS规则:
#jump_to_navigation颜色:黑色
&:focus
color: red
Run Code Online (Sandbox Code Playgroud)
为了测试这个,我设置了这个非常具体的测试:
visit root_path
selector = 'a#jump_to_navigation'
# Initial style
expect(page.evaluate_script('document.activeElement.id')).to eq '' # Make sure the link isn't focused yet
expect(page.evaluate_script("$('#{selector}').css('color')")).to eq 'rgb(0, 0, 0)' # Color initially …Run Code Online (Sandbox Code Playgroud) 有没有办法告诉Yard不要弄乱我的Rails项目的doc/文件夹?我希望它保存文件doc/yard/或类似的东西.可悲的是,我没有找到任何选择.
谢谢你的帮助.
我使用 Pandoc 从 Markdown 导出 Word docx。
默认情况下,docx 文件中的所有内容似乎都标记为英语。所以我试图覆盖它,例如通过命令行选项pandoc -s -S images.md -o images.docx -V lang=de或在标题 YAML 中:
---
subtitle: <%= @report.name %>
toc-title: <%= t('.toc_title') %>
lang: de
---
Run Code Online (Sandbox Code Playgroud)
但似乎没有任何效果,导出的 docx 文件中的所有内容都被语言拼写功能标记为红色,告诉我在英语中找不到单词。
如何覆盖语言?
更新
我尝试在 docx 文件中指定语言,只需选择所有文本(Cmd+A,我在 OSX 上)并单击左下角的语言按钮。
另外,我尝试使用Tools -> Language:
虽然没有任何影响。
更新
有趣的是,在导出为 HTML 时,在<html>属性中正确设置了语言。
我正在使用乐观锁定来防止人们在比赛条件变化方面相互覆盖。
自从我将Rails从升级5.1到以来5.2,我的规范就失效了,我一直追踪到以下事实:在changes数组中,与文件上载相关的更改不再是任何Uploader元素,而是裸露的字符串。
之前:
[1] pry(#<User>)> change
=> [
[0] #<AvatarUploader:0x007fcc7117bc00 # Value before
[1] #<AvatarUploader:17bc0cc7100x997f # Current value
Run Code Online (Sandbox Code Playgroud)
现在:
[1] pry(#<User>)> change
=> [
[0] "image.jpg", # Value before
[1] "avatar.png" # Current value
]
Run Code Online (Sandbox Code Playgroud)
我怎样才能解决这个问题?
我刚刚从 Rails 5 升级到 6。当发送一些文件下载到客户端时,我现在有一个不同的Content-Disposition:
前:
attachment; filename="Report_test_name Product_test_name A4A WCAG20 Project_test_name Project_test_customer 15-2015 v0.5.md"
Run Code Online (Sandbox Code Playgroud)
现在:
attachment; filename="Report_test_name Product_test_name A4A WCAG20 Project_test_name Project_test_customer 15-2015 v0.5.md"; filename*=UTF-8''Report_test_name%20Product_test_name%20A4A%20WCAG20%20Project_test_name%20Project_test_customer%2015-2015%20v0.5.md
Run Code Online (Sandbox Code Playgroud)
所以它将这个有趣的filename*=UTF-8''Report_test_name...东西添加到字符串中。
我认为这只是一个我不知道的新功能。但它到底有什么作用呢?为什么?
我正在尝试将字符串拆分Presentation about "Test Driven Development"为如下数组:
[ 'Presentation',
'about',
'"Behavior Driven Development"' ]
Run Code Online (Sandbox Code Playgroud)
我试过了CSV::parse_line(string, col_sep: ' '),但这导致了
[ 'Presentation',
'about',
'Behavior Driven Development' ] # I'm missing the quotes here
Run Code Online (Sandbox Code Playgroud)
我也试过一些正则表达式的魔法,但我还是初学者并没有成功.我想对于专业人士来说这很简单,所以也许有人可以指出我正确的方向?谢谢.
我已将Pandoc升级到v2,现在我的一些回归测试失败了.
这是我将自定义属性添加到元素的方式,如下所示:
# Test {role="heading" aria-level="7"}
Run Code Online (Sandbox Code Playgroud)
在早期版本的Pandoc中,这导致了
<h1 role="heading" aria-level="7">Test</h1>
Run Code Online (Sandbox Code Playgroud)
在Pandoc 2中,它是
<h1 data-role="heading" data-aria-level="7">Test</h1>
Run Code Online (Sandbox Code Playgroud)
我怎样才能改回来?两者role和aria-属性都是100%有效的HTML,因此不需要data-前缀.
ruby ×4
pandoc ×2
rspec ×2
capybara ×1
cocoon-gem ×1
csv ×1
culture ×1
html ×1
javascript ×1
jquery ×1
localization ×1
markdown ×1
ms-word ×1
nested-forms ×1
phantomjs ×1
rails-i18n ×1
regex ×1
rspec-rails ×1
yard ×1