簡體   English   中英

Rails 3-將模型傳遞給另一個控制器並在渲染時丟失樣式表

[英]Rails 3 - Passing models to another controller & losing stylesheets on render

我正在嘗試使用Twitter的Bootstrap為一個小型網站構建一個簡單的內容管理系統,但我遇到了有關視圖的問題。

Rails版本是3.0.10

我想允許用戶創建自己的頁面,因此我擁有一個包含所有標准RESTful方法的Pages控制器。 由於可以將這些對象應用到它們,因此只有登錄管理員才能訪問它們。

所以...我有一個Public控制器,它設置@pages@page實例變量,並使用這些變量在公共Show視圖中顯示它們。

這是公共控制器-非常簡單:

  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”方法(包含單個頁面)的內容傳遞到applicaton.html.erb文件中的<%= yield %>語句中:

<div class="container">    

  <%= yield %>
  <hr>

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

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

到目前為止,一切正常。

問題是,當我單擊將我帶到public_path(page)的鏈接時,我獲得了應顯示的內容,但是我失去了所有樣式。 我的樣式表實際上收到404錯誤:

在此處輸入圖片說明

所有這些樣式表都可以在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)

感謝您的瀏覽

我設法找到了自己的答案...

當Less css文件需要類型為“ stylesheet / less”的關系時,Rails幫助器stylesheet_link_tag會生成類型為“ stylesheet”的關系屬性。

修復程序指定了這樣的關系:

 <%= stylesheet_link_tag 'elements.less', :rel => 'stylesheet/less' %>
 <%= stylesheet_link_tag 'main.less', :rel => 'stylesheet/less' %>

如果您正在使用bootstrap-saas gem,請確保從application.html.erb文件中取出“ link href ='assets / css / bootstrap-sensitive.css'rel ='stylesheet'”標簽,防止助手生成關系而導致路由錯誤。

嘗試更改資源的路徑,如下所示:

# 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目錄中的靜態資產的請求。 但是您可能想重命名資源和控制器。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM