相关疑难解决方法(0)

有没有办法在Rails应用程序中获取所有模型的集合?

有没有办法可以在Rails应用程序中获得所有模型的集合?

基本上,我可以这样做: -

Models.each do |model|
  puts model.class.name
end
Run Code Online (Sandbox Code Playgroud)

collections activerecord model ruby-on-rails

194
推荐指数
15
解决办法
9万
查看次数

"或"和||之间的区别 在Ruby?

Ruby中的运算符or||运算符有什么区别?或者只是偏好?

ruby operators

169
推荐指数
5
解决办法
9万
查看次数

Ruby:"&& return"vs"返回"

在浏览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-on-rails

15
推荐指数
1
解决办法
5047
查看次数

Ruby中And/&&的运算符优先级

我对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 and-operator

14
推荐指数
2
解决办法
5266
查看次数

2 if语句中的条件

我试图检测电子邮件地址是不是两个域之一,但我有一些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

12
推荐指数
3
解决办法
5万
查看次数

基于Ruby语法的未定义局部变量

在以下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首先评估部分然后评估其内容,并且第二块代码与第一块代码的行为相同,这是不正确的?

ruby

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

ruby中优先级和/或方法参数的优先级

这是两个测试:

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.4http://romhack.wikia.com/wiki/Ruby_operators.

有谁能解释这种行为?也就是说,ruby如何知道将值作为参数传递给方法与流程操作符?

ruby operator-precedence

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

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,那么一个标志会上升.将第二个示例与变量列表一起使用,其中只需要一个变量才能继续执行所需的代码.

这些假设是否正确?

ruby

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

Ruby的'或'vs'||'

可能重复:
Ruby中"和"与&&的区别?
Ruby:||之间的区别 和'或'

我有这个代码(像这样)

foo = nil or 4
Run Code Online (Sandbox Code Playgroud)

我希望foo成为第一个值(可能是nil),还是默认值4.当我在irb中测试时,输出就是我所期望的.傻傻的我,我没有检查以后的价值foo.过了一会儿,我开始注意到我的代码中出现了一些错误,直到我检查了fooirb中的返回值,我才发现问题,这是哦,意外,nil而不是预期的4.

关于orvs 的故事是||什么?它们应该作为替代品吗?是否有一些警告使用or而不是||

ruby

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

为什么Ruby 1.9.2会给出一个语法错误:puts(true和false)?

我很困惑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)).

ruby

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