Tengo un nombre de controlador de mensajes. En mi /config/routes.rb
, he utilizado este -Ruta de Ruby on rails a un método personalizado en el controlador desde la 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
Soy nuevo a los rieles y yo a menudo se confunden con las rutas. Tengo otro controlador static_pages. En hay un archivo home.html.erb
.
Lo que quiero hacer es llamar -
métododef categoryshow
@post = Post.find(params[:category])
end
'categoryshow' del controlador de mensajes de /app/views/static_pages/home.html.erb
¿Cómo administro eso? Si uso 'posts_path', va a indexar acción en lugar de acción categoryshow.
#Lo leí a través del enlace e intenté un par de cosas a partir de ahí. Aquí está el problema que estoy enfrentando:
Cuando probé esto en el config/routes.rb
resources :posts do
collection do
get 'categoryshow'
end
end
Esto genera un 'categoryshow_posts_path'
En mi opinión, he usado esto:
<ul class="users">
<%= Post::CATEGORIES.each do |category| %>
<li>
<%= link_to category,categoryshow_posts_path %>
</li>
<% end %>
</ul>
Mi controlador de mensajes tiene el siguiente método:
categorías def cómo
@post = Post.find(params[:category])
final
En este caso, estoy consiguiendo el error siguiente:
ActiveRecord :: RecordNotFound en PostsController # categoryshow
no se pudo encontrar el mensaje sin un ID
En segundo lugar, he probado usando rutas no inventivos como se menciona en ese enlace que ya ha proporcionado:
match ':posts(/:categoryshow(/:category))'
En la vista, estoy usando esto:
Categorías
<ul class="users">
<%= Post::CATEGORIES.each do |category| %>
<li>
<%= link_to category,"posts/#{category}" %>
</li>
<% end %>
</ul>
En este caso, nuestra ruta sin recursos solo coincidirá si ninguna otra ruta de recursos existente coincide.Sin embargo, estoy viendo ese programa de acción se corresponde y me sale este mensaje de error:
Este es el show de acción:
def mostrar
@post = Post.find(params[:id])
final
ActiveRecord :: RecordNotFound en PostsController # show
No se pudo encontrar la publicación con id = Politics
Realmente agradecería cualquier ayuda aquí !!
Gracias (Sidharth)
Tengo el mismo problema ...:/ ¿Lo resolvió? – roadev
@roadev \t Dado que la pregunta era de hace cuatro años, ciertamente espero que sí. –