【问题标题】:Creating a dynamic root route in rails在 Rails 中创建动态根路由
【发布时间】:2018-04-14 08:20:57
【问题描述】:

我有一个 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. `

有谁知道我在这个中缺少什么?非常感激。

【问题讨论】:

  • 错误消息指出CafesController#root 的相应模板丢失。尝试设置视图 app/views/cafes/root.html.erb 以便 rails 呈现它。

标签: ruby-on-rails ruby


【解决方案1】:

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

  1. 当用户点击您的主页 (root) 时显示一个随机咖啡馆
  2. 当用户点击主页时,将用户随机重定向到咖啡馆的页面

在场景 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>

【讨论】:

    【解决方案2】:

    我想你可以这样做:

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

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

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

    【讨论】:

    • 我真的很喜欢这个想法,它非常适合我正在尝试做的事情。非常感谢!
    【解决方案3】:

    missing a template error 因为您必须指定要渲染的模板,所以我想象array.sample 将返回类似/cafes/firstsampe.html.erb 的内容,其中firstsampe.html.erb 保留在cafes views 文件夹中,因此您可以像这样使用它redirect_to :template =&gt; array.sample .

    希望对你有帮助。

    【讨论】:

    • 查看渲染模板的方法here
    猜你喜欢
    • 1970-01-01
    • 2017-07-26
    • 2020-07-17
    • 1970-01-01
    • 1970-01-01
    • 2018-04-29
    • 2018-03-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多