小编tom*_*all的帖子

Rails 4表单构建器,全面支持Twitter Bootstrap 3

是否有任何Rails 4兼容的表单构建器gem可以为Twitter Bootstrap 3.0.0表单提供全面的支持?

这是我认为"全面"支持的基准:

  • 支持所有3种布局(基本,水平,内联)
  • 支持基本输入类型(输入,文本区域,选择等)
  • 支持堆叠和内联复选框/单选按钮
  • 支持所有输入状态(焦点,禁用,验证)
  • 支持帮助文本/错误消息
  • 支持input-append/prepend(现在在TWBS3中称为输入组).
  • 支持处理Rails的特定表单'元素',例如date_select(内联选择框)

有关TWBS3表单的详细信息,请参阅TWBS3 文档WIP github问题.

我已经看过simple_formtwitter_bootstrap_form_for,虽然两者都取得了进展,但目前似乎都没有提供足够的解决方案.

简单的形式

看起来有一个基本布局的解决方案,但是由于TWBS3需要额外的网格标记,我目前无法看到水平形式.

https://github.com/plataformatec/simple_form/pull/864 https://github.com/plataformatec/simple_form/issues/857

Twitter引导表单

这个拉取请求看起来很有希望,但我可以看到标记和正在使用的类中存在一些不准确之处.

https://github.com/stouset/twitter_bootstrap_form_for/pull/84

ruby-on-rails formbuilder twitter-bootstrap twitter-bootstrap-3

22
推荐指数
3
解决办法
6173
查看次数

如何测试导轨4确认与Capybara和Poltergeist的对话?

我正在尝试测试一个指向destroy操作的链接会抛出一个confirm带有正确消息的本机浏览器框.

使用rails'生成链接link_to:

link_to 'Delete', user_path, method: :delete, data: { confirm: "Are you sure?" }
Run Code Online (Sandbox Code Playgroud)

并生成以下html:

<a data-confirm="Are you sure?" data-method="delete" href="/users/6" rel="nofollow">Delete</a>
Run Code Online (Sandbox Code Playgroud)

该功能在浏览器中正常工作,但我想在我的rspec功能规范中测试它.

我试图在这里这个要点中confirm描述浏览器的功能,但是我无法让它工作.

it 'requests confirmation', js: true do
  visit user_path(user)
  page.execute_script "
    window.confirmMsg = null;
    window.confirm = function(msg) { window.confirmMsg = msg; return true; };"
  click_link 'Delete'
  expect(page.evaluate_script('window.confirmMsg')).to eq('Are you sure?')
end
Run Code Online (Sandbox Code Playgroud)

给出以下错误rspec:

Failure/Error: expect(page.evaluate_script('window.confirmMsg')).to eq('Are you sure?')

       expected: "Are you sure?"
            got: nil

       (compared …
Run Code Online (Sandbox Code Playgroud)

rspec ruby-on-rails capybara poltergeist

17
推荐指数
2
解决办法
1万
查看次数

查询数组列是否包含一个或多个值

我有一个Rails 5应用程序,带有PostgreSQL 9.6数据库.

应用程序具有Report模型,具有department_ids数组字段,其定义schema.rb如下:

t.integer "department_ids", default: [], array: true
Run Code Online (Sandbox Code Playgroud)

我需要编写一个返回报表行的查询,其中department_ids列包含一组或多组给定的department_id.

我目前的解决方法是在Ruby中执行以下操作:

department_ids = [2, 5]

reports = Report.all.select do |report|
  (report.department_ids & department_ids).any?
end
Run Code Online (Sandbox Code Playgroud)

然而,使用select具有返回的缺点Array而不是ActiveRecord::Relation,这意味着我需要将过滤后的结果水合回到ActiveRecord::Relation对象中.

Report.where(id: reports.map(&:id))
Run Code Online (Sandbox Code Playgroud)

我想避免这一步,并在一个查询中处理这一切.

如何用Active Record编写这样的查询?

arrays postgresql activerecord ruby-on-rails rails-activerecord

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

如何在从更新操作呈现编辑操作时阻止rails更改路径

据我所知,这是用于编辑和更新资源的标准rails模式.

我有一个用于编辑操作的GET路由/users/:id/edit以及用于更新操作的PUT和PATCH路由/users/:id.

这是我的控制器动作:

def edit
  @user = User.find params[:id]
end

def update
  @user = User.find params[:id]

  if @user.update_attributes(user_params)
    redirect_to @user, success: "Changes saved"
  else
    flash.now.alert = "Unable to change account details"
    render :edit
  end
end
Run Code Online (Sandbox Code Playgroud)

我在我的表单部分中使用默认的form_for:

<%= form_for @user do |f| %>
Run Code Online (Sandbox Code Playgroud)

这是在html中创建以下表单:

<form accept-charset="UTF-8" action="/users/1" id="edit_user_1" method="post">
  ...
  <input name="_method" type="hidden" value="patch">
Run Code Online (Sandbox Code Playgroud)

update_attributes正确重定向用户调用时,无论何时调用失败(由于ActiveRecord验证),渲染操作都会正确显示编辑视图,但用户浏览器中的路径将更/users/1/edit改为/users/1.

根据我的阅读,这似乎是rails的预期行为,但这似乎让我感到困惑,因为我认为REST背后的核心思想是URL是指资源的规范视图?

如果我redirect_to对编辑操作而不是render那个url是应该的,但是我丢失了表单上的错误消息.

在使用redirect_to之前,是否有更明智的方法来保留URL和错误消息,而不是将错误转储到会话中?如果可以,我想避免这样做.

更新:

我希望URL保持(以及错误)的原因是因为我正在使用current_page?在导航中设置活动状态.因此,如果表单提交错误,菜单中的"编辑"操作将失去突出显示.

ruby-on-rails

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

Google如何在Google Ideas主页上创建扭曲效果?

谷歌主页思路的特点是歪曲的一些文字,并用静态音效按钮的外观,以模拟为内容的转变,从一个项目到下一个信号干扰的动画.

这是一个Gif,以防他们改变设计:

Google Ideas文字乱码gif

他们如何实现这一目标?我可以看到开发工具中的类和样式,所以JavaScript肯定会涉及到,但我找不到脚本本身的相关部分.

javascript animation distortion

6
推荐指数
1
解决办法
1708
查看次数

如何使用Ansible遍历嵌套的dict结构?

我在ansible playbook中有以下dict结构变量:

apache_vhosts:
- name: foo
  server_name: foo.com
  server_aliases:
    - a.foo.com
    - b.foo.com
    - c.foo.com
- name: bar
  server_name: bar.com
  server_aliases:
    - d.bar.com
    - e.bar.com
    - f.bar.com
Run Code Online (Sandbox Code Playgroud)

我需要为每个域server_nameserver_aliases域创建一个符号链接,例如:

/tmp/foo.com     ->   /var/www/foo
/tmp/a.foo.com   ->   /var/www/foo
/tmp/b.foo.com   ->   /var/www/foo
/tmp/c.foo.com   ->   /var/www/foo
/tmp/bar.com     ->   /var/www/bar
/tmp/d.bar.com   ->   /var/www/bar
/tmp/e.bar.com   ->   /var/www/bar
/tmp/f.bar.com   ->   /var/www/bar
Run Code Online (Sandbox Code Playgroud)

我有以下任务适用于server_name:

- name: Add a domain symlinks /tmp for server_name.
  file:
    src: "/var/www/{{ item.name }}"
    dest: "/tmp/{{ item.server_name }}"
    state: link
  with_items: …
Run Code Online (Sandbox Code Playgroud)

yaml ansible ansible-playbook

6
推荐指数
1
解决办法
1万
查看次数

Nightwatch.js - 如何断言复选框未检查?

我正在使用nightwatch.js对应用程序进行端到端测试,但无法验证复选框的状态.

attributeEquals()用来验证是否选中了复选框:

module.exports = {
  "Checkbox is checked" : function (client) {
    client
      .url(client.launch_url)
      .useCss()
      .waitForElementVisible("body", 1000)
      .verify.attributeEquals('#a_checkbox', 'checked', 'true') // quotes necessary
      .end();
  }
};
Run Code Online (Sandbox Code Playgroud)

但我还需要验证是否未选中复选框.

要做到这一点,我尝试attributeEquals()再次使用,有各种期望:

module.exports = {
  "Checkbox is not checked" : function (client) {
    client
      .url(client.launch_url)
      .useCss()
      .waitForElementVisible("body", 1000)
      .verify.attributeEquals('#b_checkbox', 'checked', null)
      .verify.attributeEquals('#b_checkbox', 'checked', 'null')
      .verify.attributeEquals('#b_checkbox', 'checked', 'false')
      .verify.attributeEquals('#b_checkbox', 'checked', false)
      .verify.attributeEquals('#b_checkbox', 'checked', '')
      .end();
  }
};
Run Code Online (Sandbox Code Playgroud)

但它们都会失败,并显示一条消息,指出该checked属性不存在:

Running:  Checkbox is not checked

?  Element …
Run Code Online (Sandbox Code Playgroud)

selenium selenium-webdriver nightwatch.js

5
推荐指数
1
解决办法
1万
查看次数

git diff如何更改Rails 5.2凭证?

我希望能够将更改的内容与加密的内容进行比较config/credentials.yml.enc

git diff仅显示加密文件内容的区别。我想看看明文的变化。

如何获得config/credentials.yml.enc文件的可读差异?

git ruby-on-rails credentials git-diff ruby-on-rails-5.2

5
推荐指数
1
解决办法
672
查看次数

如何使用OS X BSD`date`命令将日期字符串转换为纪元时间戳?

我有一个以下格式的日期字符串,Jul 27 23:59:59 2016 GMT我需要使用OS X BSD date命令将其转换为等效的纪元时间戳.

GNU date有一个很好的-d/ --date=STRING参数:

$ date -d "Jul 27 23:59:59 2016 GMT" +'%s'
1469663999
Run Code Online (Sandbox Code Playgroud)

dateOSX上的BSD 命令遗憾地没有这样的选项.

date -j -f "<FORMAT>" "Jul 27 23:59:59 2016 GMT" +'%s'似乎是要走的路,但我找不到写格式字符串.Apple的手册页指出:

date -j -f "%a %b %d %T %Z %Y" "`date`" "+%s"

can be used to parse the output from date and express it in Epoch time.
Run Code Online (Sandbox Code Playgroud)

但这似乎并非如此:

$ date -j -f "%a %b %d %T %Z …
Run Code Online (Sandbox Code Playgroud)

macos date

4
推荐指数
3
解决办法
5666
查看次数

是否可以在ssh别名中作为变量访问主机以扩展主机名?

我正在尝试在我的.ssh/config文件中创建一个SSH别名,它将匹配任何结束.vpn的主机并将主机名扩展为[name].vpn.domainname.com

我可以通过指定主机来匹配任何.vpn域,Host *.vpn但是我在扩展域时遇到了问题.

理想情况下,我想要的东西:

Host *.vpn
     HostName $HOST.domainname.com
Run Code Online (Sandbox Code Playgroud)

我看了一下,但我找不到像这样的SSH别名的任何例子.

http://collectiveidea.com/blog/archives/2011/02/04/how-to-ssh-aliases/ http://osxdaily.com/2011/04/05/setup-ssh-config-fie/

这种别名是否可以使用SSH别名?如果是这样,怎么办呢?如果没有,任何其他想法我怎么能达到这个结果?

我真的想停止输入完整的域名,并且不必为vpn上的每台机器添加50个左右的别名.

linux ssh configuration config configuration-files

3
推荐指数
1
解决办法
2343
查看次数

什么:[]在这个Ruby语句中传递给.send时做什么?

我正在调试一些Ruby代码并遇到一些我不熟悉的东西.

  user_array = user_array.send(:[], hash_key)
Run Code Online (Sandbox Code Playgroud)

这条线做什么?我把:[]send作为第一个参数传递给我感到困惑.

作为参考,user_array是Class(Chef::Node)的实例,并且hash_key是一个字符串.

ruby

2
推荐指数
1
解决办法
71
查看次数

如何在ActiveRecord中使用作用域has_many防止嵌套创建失败?

A report_template has_many report_template_columns,每个都有一个 nameindex属性。

class ReportTemplateColumn < ApplicationRecord
  belongs_to :report_template
  validates :name, presence: true
end

class ReportTemplate < ApplicationRecord
  has_many :report_template_columns, -> { order(index: :asc) }, dependent: :destroy
  accepts_nested_attributes_for :report_template_columns, allow_destroy: true
end
Run Code Online (Sandbox Code Playgroud)

report_template_columns需要由索引列进行排序。我在has_many关联范围上应用了此方法,但是这样做会导致以下错误:

> ReportTemplate.create!(report_template_columns: [ReportTemplateColumn.new(name: 'id', index: '1')])
ActiveRecord::RecordInvalid: Validation failed: Report template columns report template must exist
from /usr/local/bundle/gems/activerecord-5.1.4/lib/active_record/validations.rb:78:in `raise_validation_error'
Run Code Online (Sandbox Code Playgroud)

如果删除范围,则同一命令成功。

如果我用order作用域替换作用域,where那么命令将以相同的方式失败,因此似乎是作用域的存在而不是order特定的使用。

如何在has_many不破坏嵌套创建的情况下将范围应用于?

ruby activerecord ruby-on-rails rails-activerecord ruby-on-rails-5

2
推荐指数
1
解决办法
163
查看次数