Ruby On Rails добавляет новую страницу после строительных лесов

Я сделал скаффолд с именем b_page и создал миграцию для био. Я добавил biopage.html.erb В контроллер:

def biopage
@b_pages = BPage.all
end

в route.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 %>

но я все еще получаю ошибку:

ActiveRecord:: RecordNotFound в BPagesController#show Не удалось найти BPage с 'id'= подсветкой биопейджа:

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

1 ответ

Прежде всего, это кажется мне немного странным:

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 Действие обычно принимает идентификатор какой-либо записи для отображения на переднем конце. Если вы хотите использовать 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
Другие вопросы по тегам