小编The*_*end的帖子

Rails指定验证的顺序

我有一个我正在编写的验证器类,它有三个验证,在调用时运行 MyVariableName.valid?

validates_length_of :id_number, :is => 13, :message => "A SA ID has to be 13 digits long"
validates_format_of :id_number, :with => /^[0-9]+$/, :message => "A SA ID cannot have any symbols or letters"
validate :sa_id_validator
Run Code Online (Sandbox Code Playgroud)

第三个是自定义验证器.问题是我的验证器sa_id_validator要求传入的数据是13位数字,否则我将收到错误.我怎样才能确保validate :sa_id_validator只在前两个运行后才考虑?

对不起,如果这是一个非常简单的问题,我昨天下午试图解决这个问题.

注意:此验证器必须运行几千个条目,并且还在电子表格上传中运行,因此我需要它快速...

我看到了这样做的方法,但它可能会运行两次验证,在我的情况下会很糟糕.

编辑:

我的自定义验证器看起来像这样

def sa_id_validator
  #note this is specific to South African id's
  id_makeup = /(\d{6})(\d{4})(\d{1})(\d{1})(\d{1})/.match(@id_number)
  birthdate = /(\d{2})(\d{2})(\d{2})/.match(id_makeup[1])
  citizenship = id_makeup[3]
  variable = id_makeup[4]
  validator_key = id_makeup[5]

  birthdate_validator(birthdate) && citizenship_validator(citizenship) && variable_validator(variable) && id_algorithm(id_makeup[0], validator_key) …
Run Code Online (Sandbox Code Playgroud)

validation ruby-on-rails

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

Rails验证类型日期?

我想我可能在做梦,但我想我在某个地方读到你可以在保存之前验证对象属性的类型?什么样的validates :transaction_date, :type => Date,这将确保它的约会?

这在Rails 3.2中是否可行?我试图在网上找到这方面的证据.我已经看过rails api了,我正在通过 ActiveRecord的支持.

validation activerecord ruby-on-rails

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

ruby gsub新行字符

我有一个带有换行符的字符串,我想要用于空格.

"hello I\r\nam a test\r\n\r\nstring".gsub(/[\\r\\n]/, ' ')
Run Code Online (Sandbox Code Playgroud)

像这样的东西^只有我的正则表达式似乎也在替换'r''n'字母.另一个约束是有时模式重复两次本身,因此就会与在连续两个空格来代替,虽然这不是优选的,最好不是被切断的所有文本分开.

如果有办法只选择新行字符.或者甚至更好,如果有更多的方法来接近这个去正则表达式?

ruby regex newline gsub

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

Rails使用on hover功能截断

嗨,有人试图收集一些想法来解决这个问题.我使用rails来截断一个长度超过30个字符的公司名称.如果名称太长,页面会将公司的名称加载到页面的标题中,它会删除其他一些东西,并与样式混淆.截断我有这个服务器端.

truncate(company.title, :ommision => "...", :length => 20)
Run Code Online (Sandbox Code Playgroud)

是否有可能在jQuery中做一些事情.因此,如果我将鼠标悬停在截断的文本上,名称将悬停在上方.或者如果你知道一个更好的方式,任何事情都会很酷.

truncate ruby-on-rails

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

Vagrant默认使用Ruby 1.9.3

嘿所有我想建立一个流浪者的vm.我正在使用chef-solo进行配置,使用chef-rbenv来管理我的版本.所以在我指定的vagrantfile中

config.vm.provision :chef_solo do |chef|
  chef.cookbooks_path = "cookbooks"
  chef.add_recipe "ruby_build"
  chef.add_recipe "rbenv::system"
  chef.add_recipe "rbenv::vagrant"
  ...

  chef.json = { 
    "rbenv" => {
      "rubies" => [ "1.9.3-p327" ],
      "global" => "1.9.3-p327",
      "gems" => {
      "1.9.3-p327" => [
        { "name" => "bundler" }
        ]
      }
    }
  }
end 
Run Code Online (Sandbox Code Playgroud)

所以默认的ruby版本将是1.9.3-p327,但它崩溃了

Error executing action `install` on resource 'rbenv_ruby[1.9.3-p327] (system)'
Run Code Online (Sandbox Code Playgroud)

如果我没有在vagrant文​​件中指定版本(如上所示),并使用Chef构建的默认rbenv,以便我可以在vm中安装它.然后我明白了

vagrant@precise64:/vagrant$ rbenv install 1.9.3-p327
Downloading yaml-0.1.4.tar.gz...
-> http://dqw8nmjcqpjn7.cloudfront.net/36c852831d02cf90508c29852361d01b
Installing yaml-0.1.4...

BUILD FAILED
...
Run Code Online (Sandbox Code Playgroud)

它运行时我运行sudo rbenv install 1.9.3-p327但是当运行任何东西时我必须用sudo作为前缀ruby -v

vagrant@precise64:~$ ruby …
Run Code Online (Sandbox Code Playgroud)

ruby chef-infra vagrant rbenv chef-solo

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

Rails 使用参数测试控制器私有方法

我在控制器中有一个私有方法

private 
  def body_builder
    review_queue = ReviewQueueApplication.where(id: params[:review_queue_id]).first
    ...
    ...
  end
Run Code Online (Sandbox Code Playgroud)

我只想测试该body_builder方法,它是一种为 rest 客户端 api 调用构建有效负载的方法。但是,它需要访问参数。

describe ReviewQueueApplicationsController, type: :controller do
  describe "when calling the post_review action" do
    it "should have the correct payload setup" do
      @review_queue_application = ReviewQueueApplication.create!(application_id: 1)
      params = ActionController::Parameters.new({ review_queue_id: @review_queue_application.id })
      expect(controller.send(:body_builder)).to eq(nil)
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

如果我运行上面的它会发送body_builder方法,但它会中断,因为参数没有像在调用操作时那样正确设置。

我总是可以为该body_builder方法创建一个条件参数,以便它接受一个参数,或者它将使用这样的参数def body_builder(review_queue_id = params[:review_queue_id])然后在测试中controller.send(:body_builder, params),但我觉得更改代码以使测试通过是错误的,它应该只是测试它照原样。

在将私有方法发送给控制器之前,如何将参数输入控制器?

controller rspec ruby-on-rails private-methods

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

嵌套元素中的CSS透明度问题

嘿,我想知道你们中是否有人遇到过类似的问题?我正在网页的广告部分工作,它有一个非常酷的背景,我想继续进入元素的部分,所以我有一个框,一个框的rss提供到网站上的更新,然后我有一个广告框.这是我的HTML:

<div class="side">
  <div id="ad">
    bla
  </div>
  <div id="rss_news">
    double bla
  </div>
</div>
Run Code Online (Sandbox Code Playgroud)

和css:

.side {
  float: left;
  background-color: black;
  width: 300px;
  min-height: 710px;
  padding: 0 0 0 0px;
  margin-top: 25px;
  border: 1px solid white;
  border-radius: 8px 8px 8px 8px;
  opacity: 0.3;

 }

 #ad {
   border: 1px solid blue;
   height: 320px;
   max-height: 350px;
   margin: 15px;
   opacity: 1;

 }

 #rss_news {
   border: 1px solid yellow;
   height: 320px;
   max-height: 350px;
   margin: 15px; 
   opacity: 1;

 }
Run Code Online (Sandbox Code Playgroud)

正如你所看到的那样,正如我所期待的那样,侧面阶级将他的属性嵌入他的内部.有没有办法,我能以某种方式告诉其他id标签忽略不透明度?

提前致谢

html css nested opacity

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

使用多个条件的ActiveRecord查询

我有一个员工数据库,可以抓住公司被a引用的所有公司的所有员工 company_id

我想做这样的事情

sql = "SELECT race, `foreign`, id_number, company_id, COUNT(*) FROM `employees` WHERE company_id = 52 AND race = `African` AND `foreign` = 1 GROUP BY id_number;"
temp_arr = []
ActiveRecord::Base.connection.execute(sql).each {|int| temp_arr << int }
Run Code Online (Sandbox Code Playgroud)

像这样

employee_ids = Employees.where(company_id: company_id and race: 'African' and foreign: 1).pluck(:id_number)
Run Code Online (Sandbox Code Playgroud)

我一直收到以下错误

ActiveRecord::StatementInvalid: Mysql2::Error: Unknown column 'African' in 'where clause':
Run Code Online (Sandbox Code Playgroud)

并且一直在阅读Ruby on Rails指南,似乎无法找到我想要的东西.对不起,我从来没有做过这样的查询,可能是格式错误或其他什么

activerecord ruby-on-rails

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

Rails select_tag按字母顺序排列

我有这个 select_tag

select_tag :id, options_for_select(Portal.all.collect{|p| [p.name, portal_datum_path(p.id)]}, [@portal.name, portal_datum_path(@portal)]), :onChange => "window.location=($(this).val());"
Run Code Online (Sandbox Code Playgroud)

它允许用户选择一个门户,在该门户上可以按字母顺序查看我想要显示这些门户的某些元素.

我尝试在控制器中订购:名称,但没有获胜.

def index
  @portals = Portal.with_name_or_subdomain(params[:keyword]).order(:name).limit(100)
end
Run Code Online (Sandbox Code Playgroud)

我查看了rails docs,select_tag中没有内置选项本身是否有一些我应该使用的秘密选项?

html-select ruby-on-rails

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

Rails与名称空间的多态关联

我想保存不同的结果(默认和手动),每个结果都有原因.认为这将是多态关联的好地方.然而,这些模型是命名空间的,这是一个比预期更加苛刻的方法.按照指南

应用程序/模型/事件/ reason.rb

#  id              :integer          not null, primary key
#  reasons         :string
#  reasonable_id   :integer
#  reasonable_type :string
#  created_at      :datetime         not null
#  updated_at      :datetime         not null
#

class Event::Reason < ActiveRecord::Base
  belongs_to :reasonable, polymorphic: true
end
Run Code Online (Sandbox Code Playgroud)

应用程序/模型/事件/ result.rb

class Event::Result < ActiveRecord::Base
  belongs_to :event
  has_one :event_reason, as: :reasonable
end
Run Code Online (Sandbox Code Playgroud)

应用程序/模型/事件/ manual_result.rb

class Event::ManualResult < ActiveRecord::Base
  belongs_to :event
  has_one :event_reason, as: :reasonable
end
Run Code Online (Sandbox Code Playgroud)

但是,如果我尝试做类似的事情:

Event::ManualResult.last.event_reason
  Event::ManualResult Load (5.1ms)  SELECT  "event_manual_results".* FROM "event_manual_results"  ORDER BY "event_manual_results"."id" DESC LIMIT …
Run Code Online (Sandbox Code Playgroud)

ruby ruby-on-rails polymorphic-associations model-associations

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