0

我已经为会话扩展了设计控制器。在用户登录时添加一些额外的功能。现在登录时,如果没有输入用户名或密码,我会收到错误:SessionsController#create

为 nil 调用 id,它会错误地为 4 - 如果你真的想要 nil 的 id,请使用 object_id

我上周搜索了长达 2 小时如何解决这个问题,有人可以帮我解决这个问题吗?将不胜感激

如何正确添加我的自定义功能但仍保留设计创建操作?

class SessionsController < Devise::SessionsController

  def create

    @user = User.where(:id => current_user.id).first
    @moderated = Asset.where(:attachable_id => current_user.id, :moderated => true).first

    if @user.sign_in_count.to_i == 1
      def after_sign_in_path_for(resource)
        "/welcome/basics"
      end
    else
      if @moderated.nil?
        unless @user.has_photo?
          def after_sign_in_path_for(resource)
          "/home/no_photo"
          end
        end
      else
        def after_sign_in_path_for(resource)
          "/home/moderated"
        end
      end
    end
  end
end
4

1 回答 1

3

如果您的附加功能包括在用户第一次登录时将用户重定向到不同的页面,我建议按照wikiafter_sign_in_path_for的建议在应用程序控制器中进行定义。

class ApplicationController < ActionController::Base

  private

  def after_sign_in_path_for(resource)
    if current_user.sign_in_count == 1
      "/welcome/basics"
    else
      "/other/path"
    end
  end

end

请注意,这仅在用户是可以登录您的应用程序的唯一资源时才有效。否则,您还必须通过资源参数来区分此方法。

于 2012-04-04T15:25:48.250 回答