Rails三元运算符和'this'

时间:2011-11-20 20:39:26

标签: ruby-on-rails ruby ruby-on-rails-3 ternary-operator

Rails是否有像javascript / Jquery那样的this吗?

举个例子:

User.find_by_email(params[:candidate][:email].present? ? (u = this.id) : (u = 'not here')

或:

if User.find_by_email(params[:candidate][:email].present?
  a += 1
  user = this
end

我知道这个代码可能会以更有效的方式重写在这种情况下,但我的问题是能够使用this。 Ruby有这样的东西吗?

3 个答案:

答案 0 :(得分:3)

在课程的上下文中,您使用self

在这些情况下,虽然此代码不在User上下文中,因此您必须进行分配。

u = User.find_by_email(params[:candidate][:email])

user_name = u.any? ? u.name : 'not here'

我更喜欢.any?.present?,因为它读得更好。

答案 1 :(得分:2)

Ruby使用self来表示this。我不太确定您是否需要使用self来解决问题。

第一种情况可以改写为:

u = User.find_by_email(params[:candidate][:email]).try(:id) || 'not here'

第二种情况可以改写为:

user = User.find_by_email(params[:candidate][:email])
a += 1 if user.present?

答案 2 :(得分:1)

我猜你的案例中更惯用的ruby方法将如下所示:

User.where("email in (?)", email_arr).each do |user|
    a += 1
    user.foo = bar
end

但如果没有看到所有代码,很难说。