我正在尝试使用Rmagick调整图像大小,如果我使用该resize_to_fit方法始终首先调整高度,则优先选择宽度,但似乎我的大多数图像都首先调整为宽度.无论如何使用该resize_to_fit方法告诉它"更喜欢高度超过宽度"?
我想定义一个像这样的SQL命令:
SELECT * FROM WOMAN
UNION
SELECT * FROM MEN
Run Code Online (Sandbox Code Playgroud)
我尝试使用Ruby + Sequel中的以下代码序列来定义它:
require 'sequel'
DB = Sequel::Database.new()
sel = DB[:women].union(DB[:men])
puts sel.sql
Run Code Online (Sandbox Code Playgroud)
结果是(我在结果上做了一些漂亮的打印):
SELECT * FROM (
    SELECT * FROM `women` 
    UNION 
    SELECT * FROM `men`
) AS 't1'
Run Code Online (Sandbox Code Playgroud)
还有一个(多余的?)SELECT.
如果我UNION在此代码示例中定义了多个
sel = DB[:women].union(DB[:men]).union(DB[:girls]).union(DB[:boys])
puts sel.sql
Run Code Online (Sandbox Code Playgroud)
我得到了更多多余的SELECT.
SELECT * FROM (
  SELECT * FROM (
    SELECT * FROM (
      SELECT * FROM `women` 
      UNION 
      SELECT * FROM `men`
    ) AS 't1' 
    UNION 
    SELECT * FROM …Run Code Online (Sandbox Code Playgroud) 我创建了一个带有一些生成内容的zip文件(换句话说:存档中的文件不存在,内容是在我的脚本中构建的).
我使用类似这样的脚本:
#~ gem 'rubyzip', '=1.1.0'
require 'zip/zip'
zipname = 'test.zip'
File.delete(zipname) if File.exists?(zipname) #delete previous version
Zip::ZipFile.open(zipname, Zip::ZipFile::CREATE) do |zipfile|
  1.upto(100) do |i| #Just some testfiles with content
    zipfile.get_output_stream("%08i.txt" % i) do |output_entry_stream| #Filename
          output_entry_stream.write("Testcontent %08i" % i)            #generated content
        end
      sleep 1  #sleep some time to see the temporary files
  end   #testdocs
end #ZipFile.open(zipname)
Run Code Online (Sandbox Code Playgroud)
这工作正常,我得到我的拉链内部正确的数据.
但在创建zip时我有很多临时文件.拉链完成时会删除它们,但文件在创建过程中会打扰我.如果进程引发异常,那么我必须手动删除它们.
我有Zip :: VERSION 2.0.2和1.1.0的这种行为(使用gem rubyzip)
我试图通过执行运行Rails控制台,rails console我收到了该错误
 /home/ahmed/.rvm/gems/ruby-.2.0@global/gems/bundler-.8.2/lib/bundler/runtime.rb:34:in `block in setup': You have already activated spring 1.3.3, but your Gemfile requires spring 1.3.2. Prepending `bundle exec` to your command may solve this. (Gem::LoadError)
  from home/ahmed/.rvm/gems/ruby-.2.0@global/gems/bundler-.8.2/lib/bundler/runtime.rb:19:in `setup'
  from /home/ahmed/.rvm/gems/ruby-2.2.0@global/gems/bundler-1.8.2/lib/bundler.rb:122:in `setup'
  from /home/ahmed/.rvm/gems/ruby-2.2.0@global/gems/bundler-1.8.2/lib/bundler/setup.rb:8:in `<top (required)>'
  from /home/ahmed/.rvm/rubies/ruby-2.2.0/lib/ruby/site_ruby/2.2.0/rubygems/core_ext/kernel_require.rb:54:in `require'
  from /home/ahmed/.rvm/rubies/ruby-2.2.0/lib/ruby/site_ruby/2.2.0/rubygems/core_ext/kernel_require.rb:54:in `require'
  from /home/ahmed/.rvm/gems/ruby-2.2.0/gems/spring-1.3.3/lib/spring/commands.rb:33:in `<module:Spring>'
  from /home/ahmed/.rvm/gems/ruby-2.2.0/gems/spring-1.3.3/lib/spring/commands.rb:4:in `<top (required)>'
  from /home/ahmed/.rvm/rubies/ruby-2.2.0/lib/ruby/site_ruby/2.2.0/rubygems/core_ext/kernel_require.rb:54:in `require'
  from /home/ahmed/.rvm/rubies/ruby-2.2.0/lib/ruby/site_ruby/2.2.0/rubygems/core_ext/kernel_require.rb:54:in `require'
  from /home/ahmed/.rvm/gems/ruby-2.2.0/gems/spring-1.3.3/lib/spring/server.rb:9:in `<top (required)>'
  from /home/ahmed/.rvm/rubies/ruby-2.2.0/lib/ruby/site_ruby/2.2.0/rubygems/core_ext/kernel_require.rb:128:in `require'
  from /home/ahmed/.rvm/rubies/ruby-2.2.0/lib/ruby/site_ruby/2.2.0/rubygems/core_ext/kernel_require.rb:128:in `rescue in require'
  from /home/ahmed/.rvm/rubies/ruby-2.2.0/lib/ruby/site_ruby/2.2.0/rubygems/core_ext/kernel_require.rb:39:in `require'
Run Code Online (Sandbox Code Playgroud) 我尝试将两个版本与Beyond Compare 4的文件夹比较进行比较.但是我无法连接我的SVN文件夹,我收到错误.
当我用TortoiseSVN连接到SVN-repository时,我被要求输入用户名和密码,我连接时没有问题.
除了将SCN版本与Beyond Compare 4的文件夹比较进行比较之外,我还需要什么?
我尝试使用解析
Date.parse("28-May-10").to_s
Run Code Online (Sandbox Code Playgroud)
退货0010-5-28(这是2000年!)
我怎样才能让ruby正确地解释两位数的年份.
谷歌有很多字符串到目前为止转换技巧,但大多数处理数字月份而不是"五月".
如果a require不成功,我想避免错误.
我可以这样做:
begin
  require 'unexisting_script' 
rescue LoadError
end
Run Code Online (Sandbox Code Playgroud)
我尝试用一行条件做同样的事情:
require 'unexisting_script' rescue LoadError
Run Code Online (Sandbox Code Playgroud)
并得到错误 no such file to load -- unexisting_script (LoadError)
使用其他异常/命令我对单行救援没有任何问题,这有效:
1 / 0 rescue ZeroDivisionError
Run Code Online (Sandbox Code Playgroud)
我也尝试将命令括起来,但是成功了:
(require 'unexisting_script') rescue LoadError
Run Code Online (Sandbox Code Playgroud)
我可以将所有内容放在一行中;:
begin require 'unexisting_script'; rescue LoadError; end
Run Code Online (Sandbox Code Playgroud)
但我仍然在想,为什么最短的版本不起作用.
我发现了一些相关的问题,但没有一个提到需要和救援的问题:
我的问题:
我可以rescue在一线条件下使用require吗?如果是的话:怎么样?如果不是:为什么?
我试图使用脚本来使用Dir.chdir更改工作目录
这有效:
dirs = ['//servername/share','//servername2/share']
dirs.each do |dir|
  Dir.chdir dir
end
Run Code Online (Sandbox Code Playgroud)
如果我将上述共享信息放入文本文件(每个新行共享)并尝试加载:
File.foreach("shares.txt") {|dir|
  Dir.chdir dir
}
Run Code Online (Sandbox Code Playgroud)
我收到此错误:
'chdir':没有这样的文件或目录 - // servername/share(Errno :: ENOENT)
如何从文本文件中读取共享并更改到该目录?有一个更好的方法吗?
我使用Dataset#max日期和时间戳列 ( DB[:data].max(:timestamp),但我得到一个字符串作为结果,而不是时间戳或日期。
例子:
require 'sequel'
DB = Sequel.sqlite()
#~ DB.use_timestamp_timezones = true #no effect
DB.create_table(:data){
  Fixnum :num
  timestamp :timestamp
  Date :date
} unless DB.table_exists?(:data)
#Insert some testdata
1.upto(10){|i|
  DB[:data].insert(i, Time.now - 24*60*60*i, Date.today - i)
}
#
#my self written max function.
#
def max(ds,field)
    timestamp = nil
    ds.select(field).each{|ds|
      timestamp = ds[field] if ! timestamp or timestamp < ds[field]
    }
    timestamp
end
##Ok
p max(DB[:data],:num)
p DB[:data].max(:num)   #ok
p max(DB[:data],:timestamp)     #timestamp -> ok
p DB[:data].max(:timestamp)     #String!! …Run Code Online (Sandbox Code Playgroud) 如何获取数据集列的数据类型.或者更一般:如何获取数据集的架构?
想象一下我有以下情况:
require 'sequel'
DB = Sequel.sqlite()
DB.create_table(:data){
    nvarchar :key
    timestamp :timestamp
    Date :date
}
sel = DB[:data].select(:key, :timestamp)
Run Code Online (Sandbox Code Playgroud)
现在我想知道,timestamp我选择的列中的数据类型.
我想得到类似的东西Sequel::Dataset#columntype(column).
我做了这样的解决方案:
module Sequel
  class Dataset
    def schema()
      schema = []
      self.db.schema(self).each{|colid, coldef|
        next unless self.columns.include?(colid)
        schema << [colid, coldef]
      }
      schema
    end
    def columntype(colname)
      self.schema.each{|colid, coldef|
        next unless colid == colname
        return coldef[:type]
      }
      raise ArgumentError, "#{colname} not part of #{self.inspect}"
    end
  end
end
p sel.schema #-> [[:key, {:allow_null=>true, :default=>nil, :primary_key=>false,....
p sel.columntype(:timestamp) #-> :datetime …Run Code Online (Sandbox Code Playgroud) wb.add_worksheet(name: 'Report') do |sheet|
  sheet.add_data_validation("D25", {
    :type => :list,
    :formula1 => 'list!D11:D17',
    :showDropDown => false,
    :showInputMessage => true,
    :promptTitle => 'blah blah',
    :prompt => 'Please select a valid blah'
    })
end
Run Code Online (Sandbox Code Playgroud)
我不知道如何填充下拉列表。该模板显示了一个插入符号,它告诉我它知道我希望这是一个下拉菜单。
我想用Sequel版本替换遗留的sql语句,并且有问题要解决创建一个连接字段.
一个例子:
require 'sequel'
DB = Sequel.sqlite
DB.create_table(:test){
  field :text, :type => :nvarchar, :size => 5
}
DB[:test].insert('aa')
DB[:test].insert('bb')
DB[:test].insert('cc')
sel = DB[:test].select(
  (:text + '1' ).as(:concat)
  )
puts sel.sql
puts sel.all
Run Code Online (Sandbox Code Playgroud)
这很好用,结果是:
SELECT (`text` || '1') AS 'concat' FROM `test`
{:concat=>"aa1"}
{:concat=>"bb1"}
{:concat=>"cc1"}
Run Code Online (Sandbox Code Playgroud)
我的问题:我需要'1aa'.使用SQL这没有问题:
puts DB.fetch("SELECT ('1' || `text`) AS 'concat' FROM `test`").all
Run Code Online (Sandbox Code Playgroud)
但是对于ruby我收到了语法错误(can't convert Symbol into String (TypeError):
sel = DB[:test].select(
  ('1' + :text).as(:concat)
  )
Run Code Online (Sandbox Code Playgroud)
有趣的是,这再次有效:
sel = DB[:test].select(
  (:text + '1' + :text).as(:concat)
  )
puts …Run Code Online (Sandbox Code Playgroud) 当我尝试对下面的类进行单元测试时,我得到以下舍入错误:
class TypeTotal
    attr_reader  :cr_amount,  :dr_amount,
                 :cr_count,  :dr_count
    def initialize()
        @cr_amount=Float(0);    @dr_amount=Float(0)
        @cr_count=0;            @dr_count= 0
    end
    def increment(is_a_credit, amount, count=1)
        case is_a_credit        
         when true
            @cr_amount = Float(amount)+ Float(@cr_amount)
            @cr_count += count
         when false
            @dr_amount = Float(amount)+ Float(@dr_amount)
            @dr_count += count
        end
    end
end
Run Code Online (Sandbox Code Playgroud)
单元测试:
require_relative 'total_type'
require 'test/unit'
class TestTotalType < Test::Unit::TestCase 
  #rounding error
  def test_increment_count()
    t = TypeTotal.new()
       t.increment(false, 22.22, 2)       
       t.increment(false, 7.31, 3) 
     assert_equal(t.dr_amount, 29.53)    
  end
end
Run Code Online (Sandbox Code Playgroud)
输出:
  1) Failure:
test_increment_count(TestTotalType) [total_type_test.rb:10]:
<29.529999999999998> expected but was …Run Code Online (Sandbox Code Playgroud)