Вы, кажется, слишком усложняете. Кажется, вы пытаетесь увидеть, существуют ли api_key и active_days, и если нет, то получите его откуда-то еще.
Вот правильный способ сделать это, предполагая, что api_key и active_days - это столбцы в вашей таблице:
class Setting < ActiveRecord::Base
belongs_to :settable, :polymorphic => true
def api_key
super || settable.next_link.usable_setting.api_key
end
def active_days
super || settable.next_link.usable_setting.active_days
end
end
Вы можете немного изменить его, чтобы сохранить ясность и удалить дубликаты.
class Setting < ActiveRecord::Base
belongs_to :settable, :polymorphic => true
def api_key
super || next_usable_setting.api_key
end
def active_days
super || next_usable_setting.active_days
end
private
def next_usable_setting
settable.next_link.usable_setting
end
end
Так что в этом случае обратите внимание - если у вас есть api_key / active_days, он будет возвращен. В противном случае, он будет извлекать usable_setting из next_link. Если у этого есть api_key / active_days, он будет возвращен, в противном случае он получит usable_setting из next_link. И т.д.