有没有办法可以在Rails应用程序中获得所有模型的集合?
基本上,我可以这样做: -
Models.each do |model|
puts model.class.name
end
Run Code Online (Sandbox Code Playgroud) 在浏览http://guides.rubyonrails.org/layouts_and_rendering.html#avoiding-double-render-errors的Rails指南时,我编写了一个测试程序来测试Ruby && return
,我得到了这个奇怪的行为:
def test1
puts 'hello' && return
puts 'world'
end
def test2
puts 'hello' and return
puts 'world'
end
Run Code Online (Sandbox Code Playgroud)
这是结果输出:
irb(main):028:0> test1
=> nil
irb(main):029:0> test2
hello
world
=> nil
Run Code Online (Sandbox Code Playgroud)
有什么区别?
我对Ruby中的和/ &&/=关键字有疑问.
ruby文档说,所提到的关键字的优先级是:(1)&&,(2)=,(3)和.
我写了这段代码:
def f(n)
n
end
if a = f(2) and b = f(4) then
puts "1) #{a} #{b}"
end
if a = f(2) && b = f(4) then
puts "2) #{a} #{b}"
end
Run Code Online (Sandbox Code Playgroud)
输出是:
1)2 4 [预期]
2)4 4 [ 为什么?]
出于某种原因,使用&&会导致a和b评估为4?
我试图检测电子邮件地址是不是两个域之一,但我有一些ruby语法的麻烦.我目前有这个:
if ( !email_address.end_with?("@domain1.com") or !email_address.end_with?("@domain2.com"))
#Do Something
end
Run Code Online (Sandbox Code Playgroud)
这是条件的正确语法吗?
在以下Ruby代码中,
#! /usr/bin/env ruby
x = true
y = x and z = y
puts "z: #{z}"
Run Code Online (Sandbox Code Playgroud)
它将z: true
按预期输出.
但在下面的一个中,我希望它具有相同的行为:
#! /usr/bin/env ruby
x = true
z = y if y = x
puts "z: #{z}"
Run Code Online (Sandbox Code Playgroud)
它导致了
未定义的局部变量或方法'y'表示main:Object(NameError)
这是为什么?
我理解我正在做一个赋值,并隐式检查赋值以确定是否运行z = y
.我也明白,如果我添加y的声明y = nil
,就x = 5
在行之后,它将按预期传递并运行.
但是,期望语言if
首先评估部分然后评估其内容,并且第二块代码与第一块代码的行为相同,这是不正确的?
这是两个测试:
if [1,2,3,4].include? 2 && nil.nil?
puts :hello
end
#=>
Run Code Online (Sandbox Code Playgroud)
和
if [1,2,3,4].include?(2) && nil.nil?
puts :hello
end
#=> hello
Run Code Online (Sandbox Code Playgroud)
上面告诉我,它&&
具有比方法参数更高的优先级,所以它在逻辑上2 && nil.nil?
是正确的,并将其作为参数传递给包含?.
但是,有这个测试:
if [1,2,3,4].include? 2 and nil.nil?
puts :hello
end
#=> hello
Run Code Online (Sandbox Code Playgroud)
所以这告诉我方法参数和' and
'具有相同的优先级(或方法args高于' and
'),因为它传递2包含?在它处理'和'之前.
注意:我理解&&
并且and
具有不同的优先级.问题不在于此,而是与ruby方法的参数相关and
或相对or
.
我找不到证实这一点的文件.例如,这根本没有提到方法参数:http://phrogz.net/programmingruby/language.html#table_18.4或http://romhack.wikia.com/wiki/Ruby_operators.
有谁能解释这种行为?也就是说,ruby如何知道将值作为参数传递给方法与流程操作符?
可能重复:
Ruby:||之间的区别 和'或'
使用Ruby
||
Run Code Online (Sandbox Code Playgroud)
和
or
Run Code Online (Sandbox Code Playgroud)
是非常常见的做法,这使得了解两者之间的区别很重要,不幸的是我不确定.
首先我的问题是如果以下假设是正确的:
EX1:
if @variable_1 || @variable_2 || @variable_3
do something
else
do nothing
end
Run Code Online (Sandbox Code Playgroud)
EX2:
if @variable_1 or @variable_2 or @variable_3
do something
else
do nothing
end
Run Code Online (Sandbox Code Playgroud)
所以在第一个例子中,如果任何变量为false,那么它将执行"什么都不做"
但是,对于第二个示例,将检查所有变量,如果一个为真,则执行"执行某些操作".
总之使用"||" 如果你有一个需要检查的变量列表,如果其中一个返回false,那么一个标志会上升.将第二个示例与变量列表一起使用,其中只需要一个变量才能继续执行所需的代码.
这些假设是否正确?
我有这个代码(像这样)
foo = nil or 4
Run Code Online (Sandbox Code Playgroud)
我希望foo
成为第一个值(可能是nil
),还是默认值4.当我在irb中测试时,输出就是我所期望的.傻傻的我,我没有检查以后的价值foo
.过了一会儿,我开始注意到我的代码中出现了一些错误,直到我检查了foo
irb中的返回值,我才发现问题,这是哦,意外,nil
而不是预期的4.
关于or
vs 的故事是||
什么?它们应该作为替代品吗?是否有一些警告使用or
而不是||
?
我很困惑Ruby 1.9(JRuby 1.6.6(RUBY_VERSION =="1.9.2")和Ruby 1.9.3-p125)给出了语法错误puts(true and false)
.
我不知道为什么 - 这里有什么问题?我该如何正确编写这段代码?puts(true && false)
有效,但有解决方案and
吗?
示例irb会话:
1.9.3p125 :001 > puts(true and false)
SyntaxError: (irb):1: syntax error, unexpected keyword_and, expecting ')'
puts(true and false)
^
from /home/fr/.rvm/rubies/ruby-1.9.3-p125/bin/irb:16:in `<main>'
1.9.3p125 :002 > puts(true && false)
false
=> nil
Run Code Online (Sandbox Code Playgroud)
感谢MladenJablanović简化了这个例子.旧的例子是f(true and f(false))
.