我知道当我们不知道将传递的参数数量时,会使用splat参数.我想知道我是否应该一直使用splat.每当我传递参数时,使用splat参数是否有任何风险?
我正在构建一个应用程序来为星球大战RPG生成角色.我添加了Species
模型.Species
是复数的单数,这是一个循环.我可以通过使用在应用程序中使路由正常工作species_index_path
,但由于某种原因,has_many :characteristics, :through => :species_characteristics
它不是在一个方向上工作.
例如,我有两个模型在控制台中正确播种(和工作):Characteristics
和Species
.Characteristics
按以下方式设置:
class Characteristic < ActiveRecord::Base
has_many :species_characteristics
has_many :species, :through => :species_characteristics
has_many :skills
end
Run Code Online (Sandbox Code Playgroud)
Species
按以下方式设置:
class Species < ActiveRecord::Base
has_many :species_characteristics
has_many :characteristics, :through => :species_characteristics
end
Run Code Online (Sandbox Code Playgroud)
他们之间的模型只有一个belongs_to
.
如果我Characteristic.first.species
从控制台打电话,我会得到与该特征相关的物种清单.
Species.first.characteristics
但是,如果我打电话,我会得到以下信息:
NameError: uninitialized constant Species::Characteristics
Run Code Online (Sandbox Code Playgroud)
我期待增加一个新的变形,或者某种方式,但我什么都没有.有没有人有更好的方法将模型重命名为Race?
has_many
由于未初始化的常量错误,关系不能仅在一个方向上起作用,可能是由于拐点问题.除了重命名模型之外,还有什么方法可以修复它吗? ruby initialization ruby-on-rails inflection ruby-on-rails-4
我的测试尝试访问网页并验证页面上是否存在某些元素.例如,它访问http://foo.com/homepage.html
并检查徽标图像,然后访问http://bar.com/store/blah.html
并检查页面上是否显示某些文本.我的目标是访问Kerberos身份验证的网页.
我发现Kerberos代码如下:
主文件
uri = URI.parse(Capybara.app_host)
kerberos = Kerberos.new(uri.host)
@kerberos_token = kerberos.encoded_token
Run Code Online (Sandbox Code Playgroud)
kerberos.rb文件
class Kerberos
def initialize(host)
@host = host
@credentials = AuthGss::Negotiate.new("HTTP@#{@host}")
@credentials.cache = ENV['KRB5CCNAME'] if ENV['KRB5CCNAME']
@token = @credentials.step("")
end
def encoded_token
Base64.encode64(@token).gsub(/\n/,"")
end
end
Run Code Online (Sandbox Code Playgroud)
它利用Capybara.app_host
价值.我无法弄清楚要设置的Capybara.app_host
值.我无法弄清楚它的作用.我有Capybara.run_server = false
.有人可以帮助我了解如何使用Capybara.app_host
以及这与Kerberos身份验证的关系?
我应该能够Kernel
在每个对象上调用方法,并format
定义方法Kernel
.为什么用第三个例子method_missing
调用Kernel
?
class A
def method_missing(meth, *args, &block)
if meth == :foo
puts 'ok'
elsif meth == :format
puts 'ok'
end
end
end
a = A.new
a.foo # => ok
a.send(:foo) # => ok
a.format # => ok
a.send(:format) # => too few arguments (ArgumentError)
Run Code Online (Sandbox Code Playgroud) 我想FOO
在名称空间中定义一个Integer
类似于Float::NAN
in 的常量Float
,它本身就是一个实例Float
.它将在某种程度上类似于符号,即标记特殊情况(整数).我不需要它用于计算,但我需要它具有以下属性:
它的类必须是Integer
或者是Integer
它的子类,并且它必须对与类相关的方法起作用:
Integer::FOO.kind_of?(Integer) # => true
Run Code Online (Sandbox Code Playgroud)
可选(如果是这个类Integer
):
Integer::FOO.class # => Integer
Integer === Integer::FOO # => true
Integer::FOO.instance_of?(Integer) # => true
Run Code Online (Sandbox Code Playgroud)它必须与(理想情况下所有)其他整数不同:
Integer::FOO == 0 # => false
Run Code Online (Sandbox Code Playgroud)
理想情况下,我希望它与任何其他整数不同,但如果这是不可能的,我可以忍受一个肮脏的黑客,比如使得Integer::FOO
与最大或最小的整数相同,这是最不可能击中任何随机给定的整数.
最好的方法是什么?
b
下面的所有值都让我用*args
语法调用方法.
def some_method(a)
puts a
end
b = 1
some_method(*b) # => 1
b = false
some_method(*b) # => false
b = "whatever"
some_method(*b) # => "whatever"
Run Code Online (Sandbox Code Playgroud)
有了nil
,我期望得到nil
,而不是参数错误:
b = nil
some_method(*b) # => ArgumentError: wrong number of arguments (0 for 1)
Run Code Online (Sandbox Code Playgroud)
这里发生了什么?
知道如何在Ruby中使用以下字符串吗?
C:\inetpub\wwwroot\adminWeb
Run Code Online (Sandbox Code Playgroud)
至
C:\inetpub\wwwroot\adminWeb
Run Code Online (Sandbox Code Playgroud)
或者
C%3A%5Cinetpub%5Cwwwroot%5CadminWeb
Run Code Online (Sandbox Code Playgroud)
试图URI.decode
没有成功.
我"98"
从一个文件中读取一个数字,并尝试将其转换为二进制文件input.to_i(2)
,但我得到了0
这种方式.
input=File.read("input.dat")
puts "Input is: #{input}"
puts "Normal way is #{input.to_i(2)}"
puts "It works this way #{input.to_i.to_s(2)}"
puts "Calling the number directly works #{98.to_s(2)}"
Run Code Online (Sandbox Code Playgroud)
输出是:
Input is: 98
Normal way is 0
It works this way 1100010
Calling the number directly works 1100010
Run Code Online (Sandbox Code Playgroud) 假设我们有一个字符串str
.str
例如,如果只包含一个字符str = "1"
,则str[-1..1]
返回1
.
但是如果size
(length
)的str
长度大于1 str = "anything else"
,那么str[-1..1]
返回""
(空字符串).
为什么Ruby会像这样解释字符串切片?
下面的代码片段返回一个对象。
class Person
def initialize(name, gender)
@name = name
@gender = gender
end
end
x = Person.new("Dan", "M")
=> #<Person:0x007f6f96600560 @name="Dan", @gender="M">
Run Code Online (Sandbox Code Playgroud)
< ... >
对象和哈希有什么区别{ ... }
?为什么 Ruby 类不只返回哈希值?0x007f6f96600560
对象中的是什么?我很确定不是object_id
。