Mam posty z nazwą kontrolera. W moim /config/routes.rb
, użyłem tego -Ruby na trasie szyny do niestandardowej metody w kontrolerze z widoku
resources :posts
/app/controllers/posts_controller.rb:
class PostsController < ApplicationController
def new
@post = Post.new
end
def show
@post = Post.find(params[:id])
end
def categoryshow
@post = Post.find(params[:category])
end
def index
@posts = Post.all
end
def create
@post = Post.new(params[:post])
if @post.save
flash.now[:success] = "Your Post Successful"
redirect_to @post
else
render 'new'
end
end
end
Jestem nowy na szynach i często się mylić z tras. Mam inny kontroler static_pages. W pliku znajduje się plik home.html.erb
.
Co chcę zrobić, to zadzwonić -
def categoryshow
@post = Post.find(params[:category])
end
'categoryshow' metodę kontrolera posty z /app/views/static_pages/home.html.erb
Jak zarządzać że? Jeśli użyję "posts_path", przejdzie ona do akcji indeksowej zamiast akcji kategoryzowania.
#Przeczytałem link i wypróbowałem kilka rzeczy. Tutaj jest problem, że jestem stoi:
Kiedy próbowałem to w config/routes.rb
resources :posts do
collection do
get 'categoryshow'
end
end
To generuje 'categoryshow_posts_path'
Moim zdaniem, kiedyś tak:
<ul class="users">
<%= Post::CATEGORIES.each do |category| %>
<li>
<%= link_to category,categoryshow_posts_path %>
</li>
<% end %>
</ul>
Moje posty kontroler ma następującą metodę:
def Kategorie jak
@post = Post.find(params[:category])
koniec
W tym przypadku, ja otrzymuję następujący błąd:
ActiveRecord :: RecordNotFound w PostsController # categoryshow
Nie można znaleźć posta bez identyfikatora
Po drugie, starałem się przy użyciu non trasy zaradny jak wspomniano w tym linku, który podałeś:
match ':posts(/:categoryshow(/:category))'
W widoku używam to:
Kategorie
<ul class="users">
<%= Post::CATEGORIES.each do |category| %>
<li>
<%= link_to category,"posts/#{category}" %>
</li>
<% end %>
</ul>
W tym przypadku, nasza nierentowna trasa będzie pasować tylko wtedy, gdy żadna inna istniejąca zaradna trasa nie pasuje.Jednak widzę, że akcja show jest dopasowana i otrzymuję komunikat o błędzie:
Jest to akcja pokazowa:
def pokazać
@post = Post.find(params[:id])
koniec
ActiveRecord :: RecordNotFound in PostsController # show
Nie można znaleźć wpisu z id = Polityka
Naprawdę doceniam każdą pomoc!
Dzięki (Sidharth)
Mam ten sam problem ...:/ Rozwiązałeś problem? – roadev
@roadev \t Ponieważ pytanie pochodziło sprzed czterech lat, z pewnością mam taką nadzieję. –