小编Fab*_*bio的帖子

Rails PDF虾页眉和页脚

是否有更简单的代码在PRAWN插件生成的PDF文件中的所有N页上设置页眉和页脚.

代码写在一个

" report.pdf.prawn "文件,它是PDF视图页面的直接编码区域

以下是文件中的代码 report.pdf.prawn

pdf.text "Creation Date " +  Time.now.strftime('%d-%m-%Y')
pdf.text "Page Count:#{pdf.page_count}"
Run Code Online (Sandbox Code Playgroud)

我想要的是将这些值放置在页眉或/和页脚的左侧和右侧.

任何建议都会有所帮助.

ruby-on-rails

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

具有捆绑器的自动测试的平台特定宝石

在我正在研究的rails项目中,我使用此Gemfile插入了对rspec,黄瓜和自动测试的支持(部分)

gem 'rspec-rails'
gem 'cucumber-rails'
gem 'autotest-standalone'
gem 'autotest-rails-pure'
gem 'zentest-without-autotest'
Run Code Online (Sandbox Code Playgroud)

但是为了使用自动测试运行测试,我需要执行,bundle exec autotest否则它将失败并显示此消息

$ autotest 
loading autotest/cucumber_rails_rspec_rspec2
Error loading Autotest style autotest/cucumber_rails_rspec_rspec2 (no such file to load -- autotest/cucumber_rails_rspec_rspec2). Aborting.
Run Code Online (Sandbox Code Playgroud)

现在我正在使用Mac进行开发,我想启用autotest-growl和autotest-fsevents gem,但是如果我将这些行插入我的 ~/.autotest

require 'autotest/growl'
require 'autotest/fsevent'
Run Code Online (Sandbox Code Playgroud)

然后我需要在Gemfile中插入相应的gems,一切正常,但它会破坏我的CI服务器上的构建(在Linux上)

如何在不为本地和CI环境维护不同的Gemfile的情况下解决这个问题?

编辑:

目前我在Gemfile中用这些行解决了

if RUBY_PLATFORM.downcase.include?("darwin") # I'm on Mac
  gem 'autotest-fsevent'
  gem 'autotest-growl'
end
Run Code Online (Sandbox Code Playgroud)

它既可以在本地也可以在CI服务器上运行,我不知道它是否会弄乱一些东西,目前它似乎完美无缺.

任何更干净的方式仍然是受欢迎的.

EDIT2:

我切换到群组解决方案.虽然之前的monkeypatch在开发和持续集成方面都运行良好,但如果您使用capistrano bundler任务进行部署或使用bundle install --deployment选项(在生产中建议),它将在生产中出现错误

使用该if RUBY_PLATFORM.downcase.include?("darwin")行时,您将在部署时收到此错误.

# bundle install --deployment --without development test
You are trying to install …
Run Code Online (Sandbox Code Playgroud)

ruby-on-rails autotest bundler gemfile

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

validates_presence_of与belongs_to关联,正确的方式

我正在调查validates_presence_of实际上是如何工作的.假设我有两个模型

class Project < ActiveRecord::Base
  [...]
  has_many :roles
end
Run Code Online (Sandbox Code Playgroud)

class Role < ActiveRecord::Base
  validates_presence_of :name, :project

  belongs_to :project
end
Run Code Online (Sandbox Code Playgroud)

我想要它,以便角色总是属于现有项目,但我从这个例子中发现,这可能导致无效(孤立)角色保存到数据库中.因此,正确的方法是插入validates_presence_of :project_id我的角色模型,它似乎有效,即使我认为在语义上更有意义来验证项目的存在而不是项目ID.

除此之外,如果我只是验证project_id的存在,我认为我可以放置一个无效的id(对于一个非现有项目),因为默认情况下AR不会为迁移添加完整性检查,即使我手动添加了一些数据库不支持它们(即MySQL与MyISAM或sqlite).这个例子证明了

# with validates_presence_of :name, :project, :project_id in the role class
Role.create!(:name => 'foo', :project_id => 1334, :project => Project.new)
  AREL (0.4ms)  INSERT INTO "roles" ("name", "project_id") VALUES ('foo', NULL)
+----+------+------------+
| id | name | project_id |
+----+------+------------+
| 7  | foo  |            |
+----+------+------------+
Run Code Online (Sandbox Code Playgroud)

当然我不会写这样的代码,但我想防止DB中的这种错误数据.

我想知道如何确保角色总是与(真实的和保存的)项目相关联.

我找到了validates_existence gem,但我不想在我的项目中添加gem,除非是绝对必要的.

有什么想法吗?

更新

validates_presence_of …

validation activerecord ruby-on-rails

6
推荐指数
2
解决办法
9182
查看次数

如何格式化textarea上的滚动条样式?

我确信这不应该像看起来那么困难......我不能使用JQuery scrollpane,因为我需要它在提交时充当标准格式textarea ..需要在IE7 +,Safari&中工作firefox至少......任何想法?

试过这个......

textarea {
    scrollbar-face-color: #ff8c00;
    scrollbar-track-color: #fff8dc;
    scrollbar-arrow-color: #ffffff;
    scrollbar-highlight-color: #fff8dc;
    scrollbar-shadow-color: #d2691e;
    scrollbar-3dlight-color: #ffebcd;
    scrollbar-darkshadow-color: #8b0000;
}
Run Code Online (Sandbox Code Playgroud)

...但仅适用于IE?

有任何想法吗??

css textarea scrollbars

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

Git子树合并策略或子树命令?

我正在开始一个新的Zend Framework项目,我将与设计师合作.我将使用git维护这个项目代码,通常设计师不会说git(或任何编程语言),所以我想让他的事情变得简单,否则我恐怕他根本不会使用git.我的计划是给他一些Git gui,并且他应该只使用基本的git功能,例如commit,diff,fetch,merge,push和pull.

我正在使用gitolite来维护我们的git存储库的共享副本,因为它有一个精细的权限系统,我将只为设计者提供RW访问权限(设计)和对其他分支的读访问权限.

为了简单起见,我想与他分享主项目中的一些文件夹(遵循ZF推荐的结构),他确实需要访问它才能完成工作.与此同时,我希望我们两个人仍然能够相互融合.

他的分支的结构减少应该是这样的:

<project name>/
    application/
        layouts/
            scripts/
        views/
            scripts/
    public/
        css/
        images/
        js/
Run Code Online (Sandbox Code Playgroud)

我知道我可以使用子模块完成这项任务,但维护起来会很麻烦,因为我应该将项目拆分到(至少)4子库中,他应该只能访问子库,并且他有3个存储库可以使用.因此,如果这是唯一的解决方案,我会放弃这个想法.

我已经读过的一些链接让我觉得我所要求的是可能的:

这是我的问题:

  1. 如何创建简化分支design(git checkout -b designgit mv/rm?)
  2. 如何配置git来跟踪分支机构的编辑(所以我可以git merge design从主分支,反之亦然)

更新:

我找到了另外两种可能解决这两个问题的方法

我尝试git rm all-unneeded-stuff在设计分支中实现第一个后,我在主分支中进行提交,其中涉及白名单路径中的文件和黑名单路径中的另一个文件,但是git merge失败并显示以下消息

CONFLICT (delete/modify): application/Bootstrap.php deleted in HEAD and modified in master. Version master of application/Bootstrap.php left in tree.
Run Code Online (Sandbox Code Playgroud)

然后我在master分支中添加了一个新目录,当从设计中合并时,添加了新目录.我在驱动程序中添加了一些调试回声,我发现在两种情况下都没有调用它,可能是因为它不是真正的合并.

我还没有尝试过第二种方法(.gitignore),但是如果我已经理解这种方法不符合我的需求,因为它只会忽略设计分支中列入黑名单的文件,但是它们会在设计分公司,打破了我的要求.

我把我的实验推到了GitHub上

更新2:

我认为目前没有解决方案.使用当前的git实现,这根本无法实现.

我想要反驳,但我担心它不会发生.

git git-merge branching-and-merging git-subtree

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

Guard看不到文件更新

我正在使用此设置开发自定义引擎.

我用它创建了引擎

rails plugin new MyEngine --full
Run Code Online (Sandbox Code Playgroud)

然后我添加了rspec-railsguard-rspec作为开发依赖项

s.add_development_dependency "rspec-rails"
s.add_development_dependency "guard-rspec"
Run Code Online (Sandbox Code Playgroud)

在我的gemspec文件中.

当我同时运行rspecrake spec(有或没有bundle exec)我的规格运行正常.当我运行guard命令但它第一次运行所有规格然后它什么都不做.它不会检测整个应用程序中的任何文件更改.

Guardfile像往常一样生成guard init spec,这是它的内容

# A sample Guardfile
# More info at https://github.com/guard/guard#readme

guard 'rspec', :version => 2 do
  watch(%r{^spec/.+_spec\.rb$})
  watch(%r{^lib/(.+)\.rb$})     { |m| "spec/lib/#{m[1]}_spec.rb" }
  watch('spec/spec_helper.rb')  { "spec/" }

  # Rails example
  watch(%r{^spec/.+_spec\.rb$})
  watch(%r{^app/(.+)\.rb$})                           { |m| "spec/#{m[1]}_spec.rb" }
  watch(%r{^lib/(.+)\.rb$})                           { |m| "spec/lib/#{m[1]}_spec.rb" }
  watch(%r{^app/controllers/(.+)_(controller)\.rb$})  { |m| ["spec/routing/#{m[1]}_routing_spec.rb", "spec/#{m[2]}s/#{m[1]}_#{m[2]}_spec.rb", "spec/acceptance/#{m[1]}_spec.rb"] …
Run Code Online (Sandbox Code Playgroud)

rspec ruby-on-rails guard fsevents rails-engines

5
推荐指数
2
解决办法
5880
查看次数

规范网址和og:网址(适用于多语言站点)

我阅读了很多有关这些主题的文章,并且我知道没有什么解决方案可以完美地处理多语言站点。我使用的是不同的文件夹,以服务为不同语言的内容,所以我有www.example.com/enwww.example.com/es等等。

当用户首次访问该站点时,www.example.com我从Accept-LanguageHTTP标头中选择最匹配的语言,en如果没有语言匹配,则使用version 将其重定向到最合适的页面。因此,这里没有实际页面,www.example.com并且它始终会生成重定向。

这对于用户和搜索引擎都非常有效,但是这种方法存在缺陷,喜欢的语言分布在不同的语言中,我希望所有人都能 www.example.com

如果我设置og:url到根页FB履带投诉重定向循环,因为它去www.example.com那么它重定向到www.example.com/enog:url设置www.example.com。我想保持喜欢的统一,即“喜欢” www.example.com/es和“喜欢” www.example.com/en都应计入主要领域。

我当前的解决方案是以这种方式修改重定向代码:当用户代理为facebook时,永远不要在www.example.com请求时重定向。使用默认语言环境或FB请求的fb_localeparam的语言环境。

我还添加了区域设置开放图标记,以告知FB我页面的不同区域设置。

最后,我将规范的url标记保留在语言环境部分中,因为每种语言都以这种方式提供自己的内容,搜索引擎应该意识到这一点。这(或多或少)是主页的头部

<meta content="website" property="og:type" />
<meta content="http://www.example.com/" property="og:url" />    
<meta content="en_US" property="og:locale" />
<meta content="es_ES" property="og:locale:alternate" />
<meta content="fr_FR" property="og:locale:alternate" />
<link href="http://www.example.com/en" rel="canonical" />
Run Code Online (Sandbox Code Playgroud)

这样,一切似乎都可以正常工作,并且计数在所有语言之间共享。我只收到Facebook调试器的警告

标头中的og:url和规范url:og:url标签不匹配,它与html中的rel ='canonical'链接的URL不同。

此设置正确吗?我会对此标记有任何疑问吗?

类似的问题,但他希望每个国家都喜欢。

html seo facebook meta-tags facebook-graph-api

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

Ruby散列排列

有没有快速的方法来获得给定哈希的(随机)排列?例如,对于数组,我可以使用示例方法

ruby-1.9.2-p180 :031 > a = (1..5).to_a
 => [1, 2, 3, 4, 5] 
ruby-1.9.2-p180 :032 > a.sample(a.length)
 => [3, 5, 1, 2, 4] 
Run Code Online (Sandbox Code Playgroud)

对于哈希,我可以在哈希键上使用相同的方法并使用

ruby-1.9.2-p180 :036 > h = { 1 => 'a', 2 => 'b', 3 => 'c' }
 => {1=>"a", 2=>"b", 3=>"c"} 
ruby-1.9.2-p180 :037 > h.keys.sample(h.length).inject({}) { |h2, k| h2[k] = h[k]; h2 }
 => {3=>"c", 2=>"b", 1=>"a"} 
Run Code Online (Sandbox Code Playgroud)

但这太丑了.哈希是否有任何"样本"方法可以避免所有代码?

更新正如@Michael Kohl在评论中所指出的,这个问题仅对ruby 1.9.x有意义.因为在1.8.x中Hash是无序的,所以没有办法做到这一点.

ruby arrays hash permutation ruby-1.9

4
推荐指数
1
解决办法
1904
查看次数

使用带有rails资产管道的twitter bootstrap更少

如何正确整合twitter-bootstrap-rails gem和资产管道?

我已经按照安装步骤进行操作,目前我有这个application.css

 *= require_self
 *= require bootstrap_and_overrides
Run Code Online (Sandbox Code Playgroud)

然后在bootstrap_and_overrides.css.less中我导入其他控制器样式表,以使它们与我在覆盖文件中定义的变量一起使用,并且能够在<controller-name>.css.less文件中的控制器特定样式表中使用bootstrap mixins .目前我这样做:

# in bootstrap_and_overrides.css.less
// generated code ...
// Your custom LESS stylesheets goes here
//
// Since bootstrap was imported above you have access to its mixins which
// you may use and inherit here
//
// If you'd like to override bootstrap's own variables, you can do so here as well
// See http://twitter.github.com/bootstrap/less.html for their names and documentation
//
// Example:
// @linkColor: #ff0000; …
Run Code Online (Sandbox Code Playgroud)

ruby-on-rails less sprockets asset-pipeline twitter-bootstrap

4
推荐指数
1
解决办法
3882
查看次数

耙子问题

我正在尝试在共享主机上安装Redmine.以下是安装在其上的一些软件版本:
ruby 1.8.7(2011-02-18 patchlevel 334)[x86_64-linux]
Rails 2.3.12
MySQL 5.0.91
Redmine - 来自当前主干(v1.2.1,我猜)

我正在使用本指南进行安装:http://www.redmine.org/projects/redmine/wiki/RedmineInstall.在此之前的所有步骤我成功完成.运行"rake generate_session_store"时安装失败.有什么不对?以下是运行此命令后出现的大部分错误:

NOTE: Gem::SourceIndex#add_spec is deprecated, use
Specification.add_spec. It will be removed on or after 2011-11-01.
Gem::SourceIndex#add_spec called from
/usr/lib/ruby/site_ruby/1.8/rubygems/source_index.rb:127. 
... repeated a lot of times
Run Code Online (Sandbox Code Playgroud)

ruby rake ruby-on-rails redmine

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

无法捆绑生产

我最近不得不在我的gem文件中添加两个宝石.当我将它们添加到我的gemfile时,我直接推送到我的生产服务器.我通过SSH连接到我的生产服务器,并尝试运行bundle install.这是我走的错误:

>> bundle install
Run Code Online (Sandbox Code Playgroud)

.........

>> You are trying to install in deployment mode after changing
your Gemfile. Run `bundle install` elsewhere and add the
updated Gemfile.lock to version control.

If this is a development machine, remove the Gemfile freeze 
by running `bundle install --no-deployment`.

You have added to the Gemfile:
* RedCloth
* tanker
Run Code Online (Sandbox Code Playgroud)

gem ruby-on-rails bundler ruby-on-rails-3

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

在数据库中存储正则表达式

我需要使用 ActiveRecord 在数据库表中存储与其他字段相关的正则表达式。

我在 Regexp 类中找到了to_s方法,它指出

返回一个包含正则表达式及其选项的字符串(使用 (?opts:source) 表示法。这个字符串可以被反馈到 Regexp::new 到一个与原始语义相同的正则表达式。(但是,Regexp# == 在比较两者时可能不会返回 true,因为正则表达式本身的来源可能不同,如示例所示)Regexp#inspect 生成通常更易读的 rxp 版本。

所以这似乎是一个可行的解决方案,但它会用一种不寻常的语法存储 exp,为了让字符串存储我需要用/my-exp/.to_s. 此外,我可能无法直接编辑为正则表达式。例如一个简单的正则表达式产生:

/foo/i.to_s # => "(?i-mx:foo)" 
Run Code Online (Sandbox Code Playgroud)

另一个选项是评估字段内容,因此我可以将普通表达式存储在 db 列中,然后执行 aneval(record.pattern)以获取实际的正则表达式。这是有效的,因为我是唯一负责管理正则表达式记录的人,所以这样做应该没有问题,除了应用程序错误;-)

我还有其他选择吗?我不想在 db 字段上做 eval 但另一方面我不想使用我不知道的语法。

regex activerecord eval ruby-on-rails

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