小编Jos*_*eim的帖子

Rails引擎:何时将代码放入应用程序,何时放入lib,以及何时放入供应商文件夹?

我正在开发一个Rails引擎,所以我对现有的引擎进行了一些研究.我注意到,其中不乏有在文件中app,而且在libvendor.

我很清楚,我应该将任何应该由主机应用程序替换的代码放入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正确找到它?

ruby ruby-on-rails rails-engines

11
推荐指数
1
解决办法
3093
查看次数

nested_form/cocoon:是否可以将表行用于嵌套字段?

我通常不使用表格来表单,但是当使用嵌套表单时(使用nested_form或cocoon gem时),是否可以将每组表单元素放在表格行中?

对我来说,这看起来非常直观:表中的每一行代表一个对象.但是默认情况下,nested_form和cocoon gem都没有在它们的示例中添加表,所以我想知道使用表单是不是最好的方法?

html nested-forms cocoon-gem

11
推荐指数
1
解决办法
1809
查看次数

由于错误的默认语言环境,我的Rails应用程序的规范随机失败

有时我的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)

ruby rspec ruby-on-rails rspec-rails rails-i18n

10
推荐指数
1
解决办法
1203
查看次数

Rspec&Capybara:使用jQuery将焦点设置为元素不适用`:focus` CSS

我在我的网页中有盲人和键盘用户的跳转链接,这些用户被移出视口以便在视觉上隐藏它们; 当他们获得焦点时,他们会被移动到视口中.

我想使用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)

javascript jquery rspec capybara phantomjs

9
推荐指数
1
解决办法
4497
查看次数

Yard:为已编译的doc(而不是doc /)指定不同的路径?

有没有办法告诉Yard不要弄乱我的Rails项目的doc/文件夹?我希望它保存文件doc/yard/或类似的东西.可悲的是,我没有找到任何选择.

谢谢你的帮助.

ruby yard

8
推荐指数
1
解决办法
1062
查看次数

Pandoc:设置导出Word docx的语言

我使用 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>属性中正确设置了语言。

culture localization ms-word pandoc

8
推荐指数
1
解决办法
1460
查看次数

脏(已更改)属性:由于变更集字符串(而不是对象)中的值何时出现?

我正在使用乐观锁定来防止人们在比赛条件变化方面相互覆盖。

自从我将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)

我怎样才能解决这个问题?

ruby-on-rails optimistic-locking

8
推荐指数
1
解决办法
92
查看次数

升级到 Rails 6 后:Content-Disposition 标头现在添加奇怪的文件名*=UTF-8

我刚刚从 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...东西添加到字符串中。

我认为这只是一个我不知道的新功能。但它到底有什么作用呢?为什么?

ruby-on-rails content-disposition

8
推荐指数
1
解决办法
1004
查看次数

试图将字符串拆分为单个单词或"引用的单词",并希望在结果数组中保留引号

我正在尝试将字符串拆分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)

我也试过一些正则表达式的魔法,但我还是初学者并没有成功.我想对于专业人士来说这很简单,所以也许有人可以指出我正确的方向?谢谢.

ruby regex csv

7
推荐指数
1
解决办法
3542
查看次数

"data-"前缀被添加到自定义属性中,如何防止这种情况?

我已将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)

我怎样才能改回来?两者rolearia-属性都是100%有效的HTML,因此不需要data-前缀.

markdown pandoc

7
推荐指数
1
解决办法
159
查看次数