2010-12-25 12 views
4

Я использую authlogic-connect в Rails. Я использую простой шаблон haml, где я не хочу показывать поставщиков авторизации, которые уже добавлены.Тип несоответствия: Строка задана - Попытка сопоставить строки в ruby ​​

%h2 My Account 
%form.authentication_form{:action => connect_path, :method => :post} 
    %fieldset 
    %input{:type => :hidden, :name => :authentication_type, :value => :user} 
    %legend Add another Oauth or OpenID provider. 
    .oauth_providers 
     %ul 
     - %w(google facebook twitter yahoo).each do |name| 
      %li.oauth_provider 
      -unless "{user.authenticated_with}" =~ "{name}" 
       %img{:src => "/images/icons/#{name}.png"} 
       %input{:type => :radio, :id => "#{name}_oauth_provider", :name => :oauth_provider, :value => name} 
     .clearfix 
    %input.submit{:name => :submit, :type => :submit, :value => "Update"}/ 

Я столкнулся с несоответствием типа ошибки: String. Пользователь.authenticated с возвращает строку.

def authenticated_with 
     @authenticated_with ||= self.access_tokens.collect{|t| t.service_name.to_s} 
    end 

В чем проблема?

StackTrace:

ActionView::Template::Error (type mismatch: String given): 
    7:  %ul 
    8:   - %w(google facebook twitter yahoo).each do |name| 
    9:   %li.oauth_provider 
    10:    -unless "{user.authenticated_with}" =~ "{name}" 
    11:    %img{:src => "/images/icons/#{name}.png"} 
    12:    %input{:type => :radio, :id => "#{name}_oauth_provider", :name => :oauth_provider, :value => name} 
    13:   .clearfix 
    app/views/users/edit.html.haml:10:in `=~' 
    app/views/users/edit.html.haml:10:in `_app_views_users_edit_html_haml___2062853011_2171399360_0' 
    app/views/users/edit.html.haml:8:in `each' 
    app/views/users/edit.html.haml:8:in `_app_views_users_edit_html_haml___2062853011_2171399360_0' 

Извлеченные источник (около линии № 10): - Показывает ошибки в строке 10

+0

Сообщение трассировать трассировку или идентифицировать строку, которая сообщает об ошибке – Zabba

+0

@ Zabba предоставила стек. – Arc

+0

Почему используется '= ~' вместо 'if user.authenticated_with == name'? – tokland

ответ

12

Проходят регулярное выражение в качестве аргумента String#=~:

>> string = "el" 
>> "hello" =~ /#{string}/ 
=> 1 

 Смежные вопросы

  • Нет связанных вопросов^_^