2015-03-26 2 views
0

Это сбило меня с ума. Я использую метод first_or_initialize для пользователя, и либо он не входит в систему правильно, либо не позволяет мне обновлять и сохранять пользователя, потому что он говорит, что он существует в журналах.Не удалось обновить (first_or_initialize)

Я связан с API twitter, и я перенаправляю пользователя на страницу с настройками после их регистрации, чтобы получить свой адрес электронной почты. По какой-то причине он не обновит это. У кого-нибудь есть идея, почему?

Sessions_controller.rb

def create 
    user = User.from_omniauth(env["omniauth.auth"]) 
    if user.persisted? && user.email? 
    session[:user_id] = user.id 
    redirect_to campaigns_path, notice: "old user" 
    elsif user.save || user.email.nil? 
    session[:user_id] = user.id 
    redirect_to setup_users_path 
    else 
    redirect_to :back, alert: 'Unable to sign you in!' 
    end 
end 

модель пользователя

def self.from_omniauth(auth) 
    where(provider: auth.provider, uid: auth.uid).first_or_initialize do |user| 
    user.provider    = auth.provider 
    user.profile_image_url = auth.info.image 
    user.followers_count  = auth.followers_count 
    user.uid     = auth.uid 
    user.access_token   = auth.credentials.token 
    user.access_token_secret = auth.credentials.secret 
    user.name     = auth.info.name 
    user.nickname    = auth.info.nickname 
    user.website    = auth.info.urls.website 
    user.save! 
    end 
end 

и пользователей/установка:

<%= f.label :email %> 
<%= f.email_field :email %> 

<%= f.button "Here's mine", class: 'btn btn-default' %> 

Users_controller:

def update 
    @user = User.find(params[:id]) 
    if @user.update_attributes(user_params) 
    redirect_to :back, notice: 'Successfully updated' 
    else 
    redirect_to :back, alert: 'Unable to update' 
    end 
end 

ответ

0

Обычно в разработке, я предпочитаю символ ! всякий раз, когда я выполняю update_attributes. Таким образом, я буду знать, есть ли какие-либо ошибки проверки.

Используйте @user.update_attributes!(user_params) в своем контроллере вместо @user.update_attributes(user_params) таким образом, вы увидите соответствующие ошибки.

Если вы используете Rails 4 или выше, я надеюсь, что у вас есть params.permit().

Если нет, ознакомьтесь с https://github.com/rails/strong_parameters для получения дополнительной информации.

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