Rails троичный оператор и «это» - PullRequest
0 голосов
/ 21 ноября 2011

Есть ли у Rails this, как у javascript / Jquery?

Возьмите этот пример:

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 ]

3 голосов
/ 21 ноября 2011

В контексте класса вы используете self.

В этих случаях, хотя этот код не находится в User контексте, поэтому вы должны сделать присвоение.

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

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

Я предпочитаю от .any? до .present? в этом контексте, поскольку это читается лучше.

2 голосов
/ 21 ноября 2011

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?
1 голос
/ 21 ноября 2011

Я предполагаю, что более идиоматический подход ruby ​​для вашего случая будет примерно таким:

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

но трудно сказать, не видя весь код.

...