【问题标题】:How do I get my "show" page to render?如何让我的“显示”页面呈现?
【发布时间】:2018-01-16 22:14:33
【问题描述】:

我安装了 Rails 5。我无法让我的显示页面呈现。我的 rake 路线有这个

votes_show GET /votes/show(.:format) votes#show

然后在我的 app/controllers/votes_controller.rb 文件中我有

  def show
    id = params[:id]
    # If there is no person selected based on the param, choose one randomly
    if !id.present?
      @person = Person.order("RANDOM()").limit(1).first
    else
      @person = Person.find(:id => params[:id])
    end

但是当我去http://localhost:3000/votes/1时,我得到一个

No route matches [GET] "/votes/1"

错误。我错过了一些非常明显的东西。这是什么?

【问题讨论】:

  • 您的rake routes 应该显示GET /votes/:id(.:format) votes#show。将您的 routes.rb 文件添加到问题中。
  • 你是如何创建演出路线的?
  • @hashrocket,我在 config/routes.rb 文件中添加了“get 'votes/show'”。
  • 你使用的是 RESTful 路由吗?
  • 这是我的 config/routes.rb 文件中唯一与我的“投票”控制器有关的东西。不确定这是否能回答您的问题。

标签: ruby-on-rails http-status-code-404 ruby-on-rails-5 rails-routing


【解决方案1】:
votes_show GET /votes/show(.:format) votes#show

这行代码告诉 rails “当你看到 /votes/show 的路线时,请转到 VotesController#show 方法。”

当您然后输入 /votes/1 时,rails 会根据路线检查它,但没有找到类似的路线...它专门查找/votes/show

如 cmets 中所述,您必须添加如下一行:

get '/votes/:id(.:format)', to: 'votes#show'

或者更好的是,使用资源丰富的路线,例如

resources :votes

【讨论】:

  • 我假设我正在将“GET /votes/:id(.:format) votes#show”添加到我的 config/routes.rb 文件中?如果是这样,我尝试了这个并得到了错误,“语法错误,意外':',期望关键字_end(SyntaxError)”及其指向该行的“:id”部分。
  • 该示例是一般描述(如伪代码),并非您需要在路由文件中键入的内容。这是 Rails 的路由指南:guides.rubyonrails.org/routing.html,它将让您更好地了解这一切是如何工作的。具体来说,您可能需要使用get '/votes/:id(.:format)', to: 'votes#show'(在答案中,我们经常假设一些知识......我会更新我的答案以反映这种变化)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-02-25
  • 2018-09-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多