0

我有一个非常简单的 Rails 应用程序。我为 Card 生成了脚手架,除其他外,我可以使用 ID http://app.com/cards/3转到特定路线进行记录。

当我去根http://app.com时,我想被路由以显示带有随机 id 的随机卡,说“X”(http://app.com/cards/X

我很确定这是错误的,但我尝试在卡片控制器中添加以下内容:

def random
  @card = Card.order("RANDOM()").first
end

然后添加 routes.rb:

root :to => 'cards#random'

当我尝试去路由时,我在浏览器中遇到的错误:

Template is missing

Missing template cards/random, application/random with {:locale=>[:en], :formats=>[:html], :handlers=>[:erb, :builder, :coffee]}. Searched in: * "/Users/patricia/Documents/Repos/coastguard-quiz-rails/app/views"

最后,当我运行“rake routes”时,我得到:

    cards GET    /cards(.:format)          cards#index
          POST   /cards(.:format)          cards#create
 new_card GET    /cards/new(.:format)      cards#new
edit_card GET    /cards/:id/edit(.:format) cards#edit
     card GET    /cards/:id(.:format)      cards#show
          PUT    /cards/:id(.:format)      cards#update
          DELETE /cards/:id(.:format)      cards#destroy
     root        /                         cards#random

有人可以指导我正确的方向吗?谢谢你的建议。

4

3 回答 3

2

您基本上需要重定向到您找到的卡片页面。目前您收到模板错误,因为它正在寻找视图/views/cards/random.html.erb但它不存在。

试试这个:

def random
  @card = Card.order("RANDOM()").first
  redirect_to card_path(@card)
end
于 2013-04-03T20:52:54.940 回答
1
def random
   ids = Card.pluck(:id)
   ids.sample
end

您可以选择所有现有 id 并将其映射到一个数组(这样pluck做),并从现有 id 数组中采样一个 id。这样您就可以确保存在具有此 ID 的卡。

根据您的表大小,这可能比将所有记录加载到内存中更有效。

于 2013-04-03T20:54:21.317 回答
0

将随机方法更改为此。

def random
  @card = Card.find(rand(Card.count)+1)
end

你的路线看起来不错。

至于Template is missing错误,可能是因为您在 views/cards/ 目录中缺少 random.html.erb 或 random.html.haml

于 2013-04-03T20:47:36.010 回答