Rails 3 - передача моделей на другой контроллер и потеря таблиц стилей при рендеринге - PullRequest
1 голос
/ 04 марта 2012

Я пытаюсь создать простую систему управления контентом, используя Twitter Bootstrap для небольшого сайта, и у меня возникла проблема с представлениями.

Версия Rails 3.0.10

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

Итак ... У меня есть Public контроллер, который устанавливает @ pages и @ page переменных экземпляра и использует их для отображения их в общедоступном шоу. вид.

Вот публичный контроллер - довольно просто:

  def index
    @pages = Page.all
  end

  def show
    @pages = Page.all
    @page = Page.find(params[:id])    
  end

Причина, по которой в методе index есть переменная экземпляра @pages, заключается в том, что у меня есть страница приветствия, которая загружается, и я передаю @pages для динамического заполнения элементов навигации:

    <div class="nav-collapse">
          <ul class="nav">
            <li><%= link_to "Welcome", public_index_path, :class => 'active', :id => 'menu_home' %></li>

          <% @pages.each do |page| %>
             <li><%= link_to page.title, public_path(page) %></li>
          <% end %>           

          </ul>
   </div><!--/.nav-collapse -->

Содержимое метода show контроллера Public (который содержит отдельную страницу) передается в оператор <%= yield %> в файле Applicaton.html.erb :

<div class="container">    

  <%= yield %>
  <hr>

  <footer>
    <p>My site</p>
  </footer>

</div> <!-- /container -->

Пока что все работает нормально.

Проблема в том, что когда я нажимаю на ссылку, которая приводит меня к public_path(page) - я получаю содержимое так, как оно должно появиться, но я теряю все свои стили. На самом деле я получаю ошибку 404 в моих таблицах стилей:

enter image description here

Все эти таблицы стилей прекрасно загружались на странице http://localhost:3000/public, но когда она переходит на http://localhost:3000/public/1 - это когда все стили исчезают. Но они оба используют один и тот же макет.

Вот что показывает файл журнала при выполнении запроса:

Started GET "/public/1" for 127.0.0.1 at 2012-03-03 21:14:49 -0600
  Processing by PublicController#show as HTML
  Parameters: {"id"=>"1"}
  [1m[35mPage Load (1.0ms)[0m  SELECT "pages".* FROM "pages"
  [1m[36mPage Load (0.0ms)[0m  [1mSELECT "pages".* FROM "pages" WHERE "pages"."id" = 1 LIMIT 1[0m
Rendered public/show.html.erb within layouts/application (24.0ms)
Completed 200 OK in 63ms (Views: 51.0ms | ActiveRecord: 1.0ms)


Started GET "/public/stylesheets/bootstrap.css" for 127.0.0.1 at 2012-03-03 21:14:50 -0600

ActionController::RoutingError (No route matches "/public/stylesheets/bootstrap.css"):


Rendered c:/RailsInstaller/Ruby1.9.2/lib/ruby/gems/1.9.1/gems/actionpack-3.0.10/lib/action_dispatch/middleware/templates/rescues/routing_error.erb within rescues/layout (2.0ms)


Started GET "/public/stylesheets/bootstrap-responsive.css" for 127.0.0.1 at 2012-03-03 21:14:50 -0600

ActionController::RoutingError (No route matches "/public/stylesheets/bootstrap-responsive.css"):


Rendered c:/RailsInstaller/Ruby1.9.2/lib/ruby/gems/1.9.1/gems/actionpack-3.0.10/lib/action_dispatch/middleware/templates/rescues/routing_error.erb within rescues/layout (1.0ms)


Started GET "/public/stylesheets/elements.less" for 127.0.0.1 at 2012-03-03 21:14:51 -0600

ActionController::RoutingError (No route matches "/public/stylesheets/elements.less"):


Rendered c:/RailsInstaller/Ruby1.9.2/lib/ruby/gems/1.9.1/gems/actionpack-3.0.10/lib/action_dispatch/middleware/templates/rescues/routing_error.erb within rescues/layout (3.0ms)

Спасибо за взгляд

Ответы [ 3 ]

1 голос
/ 04 марта 2012

Мне удалось найти собственный ответ ...

Помощник Rails stylesheet_link_tag генерировал атрибут отношения типа "stylesheet", когда файлам Less css требовалось отношение типа "stylesheet / less".

Исправление определяло отношение как это:

 <%= stylesheet_link_tag 'elements.less', :rel => 'stylesheet/less' %>
 <%= stylesheet_link_tag 'main.less', :rel => 'stylesheet/less' %>
0 голосов
/ 03 мая 2013

Если вы используете гем bootstrap-saas, убедитесь, что вы удалили тег "link href = 'assets / css / bootstrap-responseive.css' rel = 'stylesheet'" из файла application.html.erb, это предотвратит создание отношения помощником, что приведет к ошибке маршрутизации.

0 голосов
/ 04 марта 2012

Попробуйте изменить путь к вашему ресурсу, что-то вроде этого:

# config/routes.rb

resources :public, :path => :my_public

Это даст вам маршруты

public_index GET  /my_public(.:format)          public#index
             POST /my_public(.:format)          public#create
new_public   GET  /my_public/new(.:format)      public#new
edit_public  GET  /my_public/:id/edit(.:format) public#edit
public       GET  /my_public/:id(.:format)      public#show
             PUT  /my_public/:id(.:format)      public#update
             DELETE /my_public/:id(.:format)    public#destroy

Таким образом, он не будет путаться с запросами к статическим ресурсам в каталоге public. Но вы можете вместо этого переименовать ресурс и контроллер.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...