2014-01-20 4 views
0

У меня проблема с путями во взглядах, и я не знаю, как ее решить. У меня есть «категории», у которых есть «посты» и «сообщения», принадлежащие «категориям».rails post path issue

1.- Я хочу показать на домашней странице усечение последнего сообщения определенной категории (идентификационный номер «1»). Тогда я хочу, чтобы после ссылки на шоу после пути, но я получаю эту ошибку:

«Unknow Действие „индекс“Действие не может быть найдено для PostsController»

Я думаю, что я мои пути неправильно потому что мне не нужен индексный указатель, потому что я собираюсь показать только эту должность. Итак, я думаю, что category_posts_path (@last_post) не является правильным путем (я не знаю, где искать дополнительную информацию о создании пути маршрута в представлениях ...). На самом деле, браузер показывает мне, что ищет категорию «2», когда это должность категории «1» ...? Что я делаю не так? Это браузер маршрут:

http://localhost:3000/en/categories/2/posts 

Это мой вид/категории/файл home.html.erb:

<div class="post_details"> 
<h2><%= @last_post.title %></h2> 
<%= image_tag @last_post.image(:header), class: "post_image" %> 
<p><%= truncate @last_post.body, length: 100 %></p> 
<p class="button"><%= link_to "READ MORE", category_posts_path(@last_post) %></p> 
</div> 

2.- У меня есть еще одна проблема пути в Views/категории/шоу .html.erb. У меня есть петля, чтобы показать все записи одной конкретной категории, но когда я связываюсь в какой-то записи (чтобы ее показать), снова появляется ошибка «индекса»:

«Неизвестное действие « Индекс »не смог найти для PostsController»

Это браузер маршрут:

http://localhost:3000/en/categories/1/posts 

Это мнения/категории/show.html.erb файл:

<div class="post_details"> 
    <h2><%= link_to post.title, category_posts_path(post) %></h2> 
    <%= image_tag post.image(:header), class: "post_image" %> 
    <p><%= post.body %></p> 
</div> 

Это файл categories_controller.rb:

class CategoriesController < ApplicationController 

    before_action :get_categories 

    def index 

    end 

    def show 

    @category = Category.find(params[:id]) 

    end 

    def home 
    if params[:set_locale] 
     redirect_to root_url(locale: params[:set_locale]) 
    else 

     @category = Category.find_by_id(1) 

     @last_post = @category.posts.order("created_at desc").first 

    end 
    end 

    def get_categories 
    @categories = Category.all.order("rank asc, name asc")  
    end 

end 

Это мой posts_controller.rb файл:

class PostsController < ApplicationController 


    def show 
     @category = Category.find(params[:category_id]) 
     @post = @category.posts.find(params[:id]) 
    end 


end 

Это мой route.rb файл:

scope '(:locale)' do 

    resources :categories do 
     resources :posts 
    end 

    resources :contacts 

    root 'categories#home' 

    get "/contact" => "contacts#new" 

    # static pages 
    get "/investment" => "contents#investment" 
    get "/partner-with-us" => "contents#partner", as: "partner" 
    get "/our-companies" => "contents#companies", as: "companies" 
    get "/site-map" => "contents#sitemap", as: "sitemap" 
    get "/terms-and-conditions" => "contents#terms", as: "terms" 
    get "/privacy" => "contents#privacy" 

    end 
+0

Вы можете оставить вывод «реки маршрутов» – beck03076

ответ

0

Когда вы устанавливаете маршруты, в которых вы должны всегда учитывать, что такое родительский элемент и какой ребенок находится в заданном маршруте. Поскольку ваши пути ничего не знают о ваших ассоциациях, вы должны явно определять каждый объект в гнездовании.

I.e. так как вы вложенные сообщения в категориях ссылок на последнюю должность в данной категории будет выглядеть следующим образом: category_post_path(@category, @last_post)

(я думаю, что у вас есть и опечатка там - category_posts_paths - какие ссылки на посты индексного - отсюда ошибок Используйте category_post_path. вместо этого. , и дать ему как родительскую категорию, так и сообщение.

Вы можете запустить rake routes видеть точную информацию о путях (или перейти к http://localhost:3000/rails/info/routes)

+0

Спасибо madsheep, что была проблемой, и с вашим объяснением я просто понял, как изменить представления/категории/файл show.html.erb тоже так: category_post_path (@category, post) – user2092653

+0

Без проблем;) С удовольствием. – madsheep