2013-05-05 2 views
0

Я пишу этот вопрос, потому что не нашел решения в StackOverflow и/или любых связанных форумах. Моя проблема в основном.Рельсы маршрутов в. вместо/

Я добавил таблицу, названную «новости» в проект Rails. Таблица создается именно в названии «новости» в моем Mysql.

После этих шагов я столкнулся с ситуацией, когда ссылка на «новости» перенаправляет меня на «news.1», а не «news/1».

Мой routes.rb

match "news" => 'homepage#news' 
match "news/:id" => 'homepage#news_details' 

Мой контроллер

def news 
@news = News.all 

respond_to do |format| 
    format.html { render layout: "news" } # index.html.erb 
    format.json { render json: @news } 
end 
end 

def news_details 
@news = News.find(params[:id]) 

respond_to do |format| 
    format.html { render layout: "news" } # index.html.erb 
    format.json { render json: @users } 
end 
end 

в news.html.erb

<div class="postDetails"> 
<a href="trainers-single.html" class="postTitle"><%= news.title %></a> 
<p><%= truncate news.details, :length => 90 %></p> 
<%= link_to 'MORE INFO', news, :class => "button-small-theme rounded3" %> 
</div> 

В news.html.erb в link_to Дополнительная информация, новости переадресовывает меня к «news.1» вместо «news/1»

Благодарим вас за чтение.

ответ

1

Попробуйте вместо этого использовать маршрут по именованному маршруту. Если вы запустили rake routes в консоли, посмотрите, какое имя он назначил маршруту. Если нет, то изменить routes.rb к

match "news/:id", to: "homepage#news_details", as: "show_news" 

Тогда в вашей точки зрения, использовать

<%= link_to "MORE INFO", show_news_path(news), class: "button-small-theme rounded3" %> 

Смотрите, если это помогает. Если нет, возможно, стоит попробовать настроить ваше приложение в виде большего количества рельсов. Вы получаете доступ к своим новостным ресурсам через HomepageController, что хорошо, но было бы лучше использовать выделенный NewsController, учитывая, что вы определяете два маршрута, которые рельсы будут давать вам автоматически. Я был бы более склонен:

  • Создать новый контроллер - NewsController
  • Добавить resources :news в routes.rb

В контроллере новостей, то вы должны иметь что-то вроде:

class NewsController < ApplicationController 

    def index 
     @news = News.all 
     respond_to do |format| 
      format.html { render layout: "news" } 
      format.json { render json: @news } 
     end 
    end  

    def show 
     @news = News.find(params[:id]) 
     respond_to do |format| 
      format.html { render layout: "news" } 
      format.json { render json: @news } 
     end 
    end 

end 

Затем вам просто нужно переместить файлы своего вида в папку news вместо папки dashboard, и она ould начинает работать. Тогда, на ваш взгляд, ваша ссылка будет такой же, как у вас сейчас, но она действительно должна работать :)

+0

Ваше первое решение решило все. Спасибо огромное! Ты заслуживаешь это. – Yagiz

+0

Ah awesome :) рад, что это сработало. Я всегда ненавижу зацикливаться на чем-то и не зная, почему он не работает :( – PaReeOhNos

Смежные вопросы