Ho un nome di controller post. Nel mio /config/routes.rb
, ho usato questo -Ruby on rails indirizza a un metodo personalizzato nel controller dalla vista
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
Sono nuovo di rotaie e spesso si confondono con gli itinerari. Ho un altro controller static_pages. In c'è un file home.html.erb
.
Quello che voglio fare è chiamare -
def categoryshow
@post = Post.find(params[:category])
end
'Categorievisualizza' il metodo di controllo post di /app/views/static_pages/home.html.erb
Come faccio a gestire questo? Se uso "posts_path", va all'azione indice invece di categorizzare l'azione.
#Ho letto il collegamento e ho provato un paio di cose da lì. Qui è il problema che sto affrontando:
Quando ho provato questo nella cartella config/routes.rb
resources :posts do
collection do
get 'categoryshow'
end
end
Questo genera un 'categoryshow_posts_path'
A mio parere, ho usato questo:
<ul class="users">
<%= Post::CATEGORIES.each do |category| %>
<li>
<%= link_to category,categoryshow_posts_path %>
</li>
<% end %>
</ul>
mio regolatore di messaggi ha il seguente metodo:
categorys def come
@post = Post.find(params[:category])
fine
In questo caso, sto ottenendo il seguente errore:
ActiveRecord :: RecordNotFound in PostsController # Categorievisualizza
Impossibile trovare Post senza un ID
In secondo luogo, ho provato utilizzando percorsi non di risorse di cui al quel link che hai fornito:
match ':posts(/:categoryshow(/:category))'
Nella vista, sto usando questo:
Categorie
<ul class="users">
<%= Post::CATEGORIES.each do |category| %>
<li>
<%= link_to category,"posts/#{category}" %>
</li>
<% end %>
</ul>
In questo caso, il nostro percorso non intraprendente corrisponderà solo se nessun altro itinerario di risorse esistente corrisponde.Tuttavia, sto vedendo che mostrano l'azione è abbinato e ricevo questo messaggio di errore:
Questa è l'azione spettacolo:
mostrare def
@post = Post.find(params[:id])
fine
ActiveRecord :: RecordNotFound in PostsController # show
Impossibile trovare Post con id = Politica
Apprezzerei molto qualsiasi aiuto qui !!
Grazie (Sidharth)
Ho lo stesso problema ...:/ Hai risolto? – roadev
@roadev \t Poiché la domanda era di quattro anni fa, certamente lo spero. –