2017-01-27 4 views
0

application.html.erbファイルにフッターdivがあります。フッターの位置は相対的ですが、数ページではフッターの位置を固定として設定します。各ページにフッターコードを追加しなくても、どうすればいいですか?各ページで異なるフッタースタイルを使用するRuby on Rails

+0

はあなたがルールを持っていないと言うことができますか?例えばpage1、page2、page3の場合は相対的になり、残りは修正されますか? – marmeladze

+0

ページごとに異なるレイアウトを作成することができます –

+0

どうすればよいか分かりません。それについて私にもっと情報を教えてください。 – Kristis

答えて

1

迅速かつ厄介な方法があるかもしれない、

プライベートの追加(おそらくあなたはすでにやった)部分

ページ/ _footer.html.erb

<div class='footer <%= @position||"relative" %>'> 
    Lorem ipsum 
</div> 

を作成しますメソッドをコントローラに送信します。

そして、(私はすぐに作成し、足場てきたように、私は唯一のアプリケーションのレイアウトをしました)あなたのレイアウトファイルでそれを参照する
class PagesController < ApplicationController 
    before_action :set_page, only: [:show, :edit, :update, :foo, :destroy] 
    before_action :fixed_footer, only: [:show, :edit, :mission, :vision] 

    def index 
    @pages = Page.all 
    end 

    def show 
    end 

    def foo 
    render 'show' 
    end 

    def about 
    render 'some_static_page' 
    end 

    def mission 
    render 'some_static_page' 
    end 

    def vision 
    render 'some_static_page' 
    end 

    ..... 

    private 
    def fixed_footer 
     @position = "fixed" 
    end 
    # Use callbacks to share common setup or constraints between actions. 
    def set_page 
     @page = Page.find(params[:id]) 
    end 

    # Never trust parameters from the scary internet, only allow the white list through. 
    def page_params 
     params.require(:page).permit(:title, :email, :comments) 
    end 
end 

<!DOCTYPE html> 
<html> 
    <head> 
    <title>Simpleapp</title> 
    <%= csrf_meta_tags %> 

    <%= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track': 'reload' %> 
    <%= javascript_include_tag 'application', 'data-turbolinks-track': 'reload' %> 
    </head> 

    <body> 
    <%= yield %> 
    <%= render 'pages/footer' %> 
    </body> 
</html> 

これだけです。実際にすべてではなく、あなたがしなければならないのは、あなたのスタイルシートファイル内のある種のスタイルをfixedrelativeに与えることです。

結果:[index、show、new、foo、edit] 2と5は固定クラスです。

$ curl http://lvh.me:3000/pages | grep "div class='footer" 
    % Total % Received % Xferd Average Speed Time Time  Time Current 
           Dload Upload Total Spent Left Speed 
100 2815 0 2815 0  0 18599  0 --:--:-- --:--:-- --:--:-- 18642 
    <div class='footer relative'> 
$ curl http://lvh.me:3000/pages/1 | grep "div class='footer" 
    % Total % Received % Xferd Average Speed Time Time  Time Current 
           Dload Upload Total Spent Left Speed 
100 2388 0 2388 0  0 16032  0 --:--:-- --:--:-- --:--:-- 16135 
    <div class='footer fixed'> 
$ curl http://lvh.me:3000/pages/new | grep "div class='footer" 
    % Total % Received % Xferd Average Speed Time Time  Time Current 
           Dload Upload Total Spent Left Speed 
100 2833 0 2833 0  0 12242  0 --:--:-- --:--:-- --:--:-- 12264 
    <div class='footer relative'> 
$ curl http://lvh.me:3000/pages/1/foo | grep "div class='footer" 
    % Total % Received % Xferd Average Speed Time Time  Time Current 
           Dload Upload Total Spent Left Speed 
100 2391 0 2391 0  0 16165  0 --:--:-- --:--:-- --:--:-- 16265 
    <div class='footer relative'> 
$ curl http://lvh.me:3000/pages/1/edit | grep "div class='footer" 
    % Total % Received % Xferd Average Speed Time Time  Time Current 
           Dload Upload Total Spent Left Speed 
100 2959 0 2959 0  0 19393  0 --:--:-- --:--:-- --:--:-- 19467 
    <div class='footer fixed'> 
+0

しかし、静的ページの固定位置を設定したいのですか?あなたはそれを手伝ってもらえますか? – Kristis

+0

それは同じです。私は私の答えを更新しました。ルートファイルを更新するのを忘れないでください。 p.s. @maxは既に良い、より多くのレールの方法の答えを投稿しました。あなたはそれを使用して、彼に感謝する必要があります - )) – marmeladze

2

あなたは<body>または<html>要素にクラスを追加することができます。

.users #footer { 
    height: 100px; 
} 

.users.show #footer { 
    height: 150px; 
} 
+0

私はそれがそれを行うのRailsの方法であるとは言いません - 私はWordPressのテーマを実行し、控えめに使用から適応パターン。 – max

1

module ApplicationHelper 
    # takes an array or list of strings and makes a string suited 
    # for a html class attribute. 
    # @param [String*|Array] args 
    # @return [String] 
    def css_class(*args) 
    [*args].flatten.compact.join(" ") 
    end 
end 

<body class="<%= css_class(controller_name, action_name) %>"> 

これは、あなたが特定のコントローラやアクションにスタイルを添付できるようになります

あなたはo ActionView::Helpers::CaptureHelperを使用します。

module ApplicationHelper 
    def footer_tag(**kwargs) 
    klass = "some-default-class " + (content_for(:footer_class) || "" 
    content_tag(:footer, kwargs.merge(class: klass)) do 
     yeild if block_given? 
    end 
    end 
end 

# app/views/shared/_footer.html.erb 
<% footer_tag do %> 
    <p>Copyright 2017, EvilCorp</p> 
<% end %> 

そして、あなたは、あなたの意見にprovideまたはcontent_forを使用します。

<% content_for(:footer_class, "fixed") %> 
<% provide(:footer_class, "fixed") %> 

差がストレートレイアウトに後でフラッシュしばらくバッファへの最初のconcatsています完了したとして歩留まりをマークします。 application.html.erb

1

あなたは<body>開始タグにアクセスし、例えばレストランのアプリケーションを持っている場合次に、あなたは多分indexshowとレストランコントローラを持っています。この<body class="<%= params[:controller] %>-<%= params[:action] %>">

のようなものにそれを変更することができます。

さて、これらのページに体が.restaurants-indexというクラスを持つことになりますし、.restaurants-show

あなたはSCSSを使用している場合は、

.restaurants-index { 
    .navbar { 
    position: fixed; 
    } 
} 

.restaurants-show { 
    .navbar { 
    position: relative; 
    } 
} 
+0

ああ、申し訳ありません。私の答えは重複しているのが分かります。 –

関連する問題