我有一个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. `
有人知道我错过了这个吗?非常感激。
答案 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中:
控制器:
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>