Autovivification. AFAIK никакой другой язык имеет его .
Похоже, я собираюсь ответить на этот вопрос сам.
Я использую следующий код для создания кнопки входа (в HAML):
- form_tag({:controller => "users", :action => "create"}, {:method => "post"}) do
= oauth_register_button :value => "Sign In with Twitter"
, а затем просто создаю объект сеанса пользователя в методе create класса UsersController, если пользователь уже существует:
def create
@user = User.new(params[:user])
@user.save do |result| # LINE A
if result
flash[:notice] = "Account registered!"
redirect_to some_inner_path
else
unless @user.oauth_token.nil?
@user = User.find_by_oauth_token(@user.oauth_token)
unless @user.nil?
UserSession.create(@user)
flash.now[:message] = "Welcome back!"
redirect_to some_inner_path
else
redirect_back_or_default root_path
end
else
redirect_back_or_default root_path
end
end
end
end
Если пользователь является первым посетителем, то объект пользователя успешно сохраняется в СТРОКЕ A. И если это не так, и существует oauth доступный токен, затем мы пытаемся получить пользователя из БД и войти в систему.