Rails условная проверка - PullRequest
       3

Rails условная проверка

5 голосов
/ 05 сентября 2011

Итак, у меня есть две модели:

class Screen < ActiveRecord::Base
  belongs_to :user
  validates :screen_size, :numericality =>{:less_than_or_equal_to =>100,:greater_than_or_equal_to => 0},:if => "user.access==1"

class User < ActiveRecord::Base
  has_many :screens
  attr_accessible :access

Но этот код не работает, потому что независимо от значения user.access он все равно будет выполнять проверку.Что я тут не так делаю?

Спасибо

Ответы [ 2 ]

21 голосов
/ 05 сентября 2011

изменить:

:if => "user.access==1"

с:

:if => lambda { |screen| screen.user.try(:access) ==1 }

Потому что:

  • вам необходимо передать функцию для оценки состояния наfly

  • если на вашем экране нет пользователя, простое screen.user.access выдаст исключение

1 голос
/ 05 сентября 2011

Вы передали строку в: исполняемый параметр proc / function: if. Когда это строка, она пытается найти функцию с таким именем. На самом деле вам нужна анонимная функция, использующая лямбду.

class Screen < ActiveRecord::Base
  belongs_to :user
  validates :screen_size, :numericality => {:less_than_or_equal_to =>100, :greater_than_or_equal_to => 0}, :if => lambda {|s| s.user.access == 1 }
end

class User < ActiveRecord::Base
  has_many :screens
  attr_accessible :access
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...