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