通过自定义控制器操作有条件地路由rails root来解决问题

时间:2017-07-17 09:44:19

标签: ruby-on-rails routing root

我试图有条件地路由两个不同的控制器动作。我创建了RoutesController#root并从routes.rb发送了root,但是无论我在root方法中写什么,应用程序只想找到要呈现的根模板。

我想要实现的目标是:

  1. 用户请求'/'
  2. 用户被推送登录
  3. 成功登录如果current_user.company.present?(当前路由控制器中的current_user可用吗?)则呈现引号#new
  4. 否则,如果没有公司提交公司#new
  5. 我遇到了丢失的模板错误;

    Missing template companies/1/quotes/new.1 with {:locale=>[:en], :formats=>[:html], :variants=>[], :handlers=>[:raw, :erb, :html, :builder, :ruby, :coffee, :jbuilder]}. Searched in: * "app/views"
    

    我希望它能在app / views / quotes / new中搜索,我做错了什么?

    RoutesController.rb

    class RoutesController < ActionController::Base
      before_filter :authenticate_user!
    
      def root
        if current_user.company.present? 
          render new_company_quote_path(current_user)# 'quotes#new'
        else
          render new_company_path(current_user) # 'companies#new'
        end
      end
    end
    

    的routes.rb

    root 'routes#root'
    

1 个答案:

答案 0 :(得分:1)

当您只想从路径渲染/显示特定视图时,使用

render,它不会执行任何代码。有关详细信息,请参阅this发布。

因此,在您的情况下,它应该是redirect_to而不是render

关于最佳实践的事情,对我来说看起来不错。