首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >试图覆盖Thoughtbot的Rails清除gem中的控制器

试图覆盖Thoughtbot的Rails清除gem中的控制器
EN

Stack Overflow用户
提问于 2013-12-02 02:33:53
回答 1查看 1.6K关注 0票数 1

我正在使用Rails 4.0.1的Rails 1.1.0GEM。我试图重写会话控制器,以提供我自己的自定义方法。我未能成功地让rails使用我的控制器。

/app/控制器/会话_控制员.app

代码语言:javascript
复制
class SessionsController < Clearance::SessionsController
  private

    def flash_failure_after_create
      flash.now[:notice] = translate(:bad_email_or_password,
        :scope => [:clearance, :controllers, :sessions],
        :default => t('flashes.failure_after_create', :new_password_path => new_password_path).html_safe)
    end
end

我在我的routes.rb文件中尝试了几个不同的东西,但都失败了。我想改变路线sign_in。

代码语言:javascript
复制
get '/sign_in' => 'sessions#new', :as => 'sign_in'

产生以下错误。

您可能已经使用:as选项定义了两个名称相同的路由,或者您可能正在重写已由具有相同命名的资源定义的路由。

有什么想法吗?谢谢!

编辑:我犯了一个错误。我实际上需要sessions#create来使用我的控制器。当会话登录失败时,我试图向yaml文件传递一个不同的变量。

编辑2: i适当的session#create行到我的路由。在会话控制器中,我复制和编辑了flash_failure_after_create方法。没有人叫它。于是,我复制了create方法。现在,正在调用我的create方法,而不是我的flash_failure_after_create方法。为了调用它,我必须从gem中复制create方法,并将status.failure_message更改为直接调用flash_failure_after_create方法。这是某种有权限的虫子吗?

routes.rb

代码语言:javascript
复制
post 'session' => 'sessions#create', :as => nil

sessions_controller.rb

代码语言:javascript
复制
class SessionsController < Clearance::SessionsController
  def create
    @user = authenticate(params)

    sign_in(@user) do |status|
      if status.success?
        redirect_back_or url_after_create
      else
        #flash.now.notice = status.failure_message
        flash.now.notice = flash_failure_after_create
        render :template => 'sessions/new', :status => :unauthorized
      end
    end
  end

  private

    def flash_failure_after_create
      # Changed flash for easy testing
      flash.now[:notice] = 'Ballz.'
      #flash.now[:notice] = translate(:bad_email_or_password,
      #  :scope => [:clearance, :controllers, :sessions],
      #  :default => t('flashes.failure_after_create', :sign_up_path => sign_up_path).html_safe)
    end
end
EN

回答 1

Stack Overflow用户

发布于 2013-12-02 03:29:38

我相信这是可行的:

代码语言:javascript
复制
get '/sign_in' => 'sessions#new', :as => nil

Rails 4不再支持覆盖路由名称,所以不要命名您的覆盖。映射仍然是一样的,所以sign_in_path仍然可以工作。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20319949

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档