在rails中创建动态根路由

时间:2017-11-01 22:25:26

标签: ruby-on-rails ruby

我有一个rails应用程序,我想让登陆页面动态化,这样每次用户转到它都会发生变化。

我的应用程序中有咖啡馆,每个咖啡馆都有自己的展示页面。我希望每个节目页面都是动态的。网址是基于咖啡馆的ID,所以我想我必须使用这些ID作为创建我正在寻找的动态工作的焦点。

在我的咖啡馆控制器中我有

class CafesController < ApplicationController
  def root
    array = Cafe.pluck(:id)

    array.sample
  end
end

在我的路线文件中

root 'cafes#root'

我得到的错误是

`CafesController#root is missing a template for this request format and variant. `

有人知道我错过了这个吗?非常感激。

3 个答案:

答案 0 :(得分:1)

我想你可以这样做:

class CafeController < ApplicationController 
  def root
    redirect_to Cafe.all.sample
  end 
end

顺便说一句,这种方法的好处是让您以传统方式保留和使用所有正常路线。

此外,您可能会考虑将此操作称为更具描述性的操作。也许像random_cafe这样的东西。 IMO,root 'cafes#random_cafe'更容易理解。

答案 1 :(得分:0)

missing a template error,因为您必须指定要呈现的模板,我想象array.sample将返回/cafes/firstsampe.html.erb之类的内容,其中firstsampe.html.erb在cafes视图文件夹中保留所以你可以像redirect_to :template => array.sample一样使用它。

希望它有所帮助。

答案 2 :(得分:0)

我不知道您的数据是什么样子,但您可以采取以下两种方法:

  1. 当用户点击您的主页(根)时显示随机咖啡馆
  2. 当用户访问主页时,将用户随机地重定向到咖啡馆页面
  3. 在方案1中:

    控制器:

    class CafesController < ApplicationController
      def index
         @cafe = Cafe.order("RANDOM()").first
      end
    end
    

    路由:

    root 'cafes#index'
    

    查看:

    app/views/cafes/index.html.erb
    
    <p><%= @cafe.name %></p>
    

    在方案2中:

    控制器:

    class CafesController < ApplicationController
      def index
         redirect_to cafe_path(Cafe.order("RANDOM()").first)
      end
    
      def show
        @cafe = Cafe.find(params[:id])
      end
    end
    

    路由:

    root 'cafes#index'
    resources :cafes, only: [:show]
    

    查看:

    app/views/cafes/show.html.erb
    
    <p><%= @cafe.name %></p>