Ruby On Rails在脚手架之后添加新页面

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Ruby On Rails在脚手架之后添加新页面相关的知识,希望对你有一定的参考价值。

我制作了一个名为b_page的脚手架,我创建了一个bio的迁移我添加了一个biopage.html.erb在控制器中:

def biopage
@b_pages = BPage.all
end

在routes.rb中

resources :b_pages do  
collection do  
  get 'biopage'  
 end 
end 

在bio.html.erb中:

<div class="jumbotron">
<h1>Bio of :</h1>
<h2><b><%= @b_page.Bpage_name %></b></h2>
<h3><%= @b_page.user.email %></h3>
</div>
<%= @b_page.bio %>

但我仍然得到错误:

BPAGEController #show中的ActiveRecord :: RecordNotFound无法找到带有'id'= biopage突出显示的BPage:

      @b_page = BPage.find(params[:id])
答案

首先,这对我来说有点奇怪:

resources :b_pages do  
  collection do  
    get 'biopage'  
  end 
end

因为它会产生一条路线:/b_pages/biopage。您可能想要做以下事情:

resources :b_pages, except: :show
get '/biopage/:id', to: 'b_pages#show'

这样,你的biopage路线将转到show控制器方法,你仍然可以使用其他b_pages路线。

您正在查看ActiveRecord::RecordNotFound错误消息,因为您没有要显示的BPage对象,因此show方法正在抱怨。请注意我上面写的路线如何使用:id - 这是因为show动作通常需要在前端显示某条记录的id。如果你想使用biopage并将它链接到show方法,你应该返回一个实际显示的对象。否则你应该为biopage创建一个完全不同的控制器方法,它不会干扰b_pages资源。路线中有类似的东西:

resources :b_pages
get '/biopage/:id', to: 'b_pages#your_method'

在控制器中你有

class BPages < ApplicationController
  # index, show, destroy, etc. here

  def your_method
    # Get whatever object you want returned here
  end
end

以上是关于Ruby On Rails在脚手架之后添加新页面的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Ruby on Rails 中链接个人资料页面

在创建控制器和模型之后(仅)创建 Ruby on Rails 视图

Ruby on rails,改变最近创建的脚手架

ruby on rails 路线

Ruby on Rails 6 脚手架模板位于何处?

如何在 ruby​​ on rails 中更改路线?