0

ラピッドベースアプリのレールコンポーザーで遊んでいます。ホームページでbootstrap-devise-punditアプリをセットアップしました(Home、User、Aboutオプションも試しました-ページは../views/pagesに静的に設定されています)。ホームページは「訪問者」コントローラーであり、標準レイアウトとしてのビューはそうです。Rails composer は、追加のページ (静的) に gem high_voltage を使用して、それらを ../views/pages フォルダーに配置します。私が問題を抱えているのは、自分のモデル/コントローラー/ビューを追加することです。機能しないというわけではありません。私の問題は、ビューがアプリケーションのヘッダー/フッターでレンダリングされないことです。「訪問者」ページがそうです。理由がわからない。ここで何が欠けているのでしょうか?

たとえば、

I create a model mymodel.rb in ../app/models
I create a controller mycontroller.rb in ../app/controllers
I create a view index.html.erb in ../app/views/mycontroller/

モデルは照会でき、ビューはインデックスをレンダリングします (定義/作成されたとおりの表示およびカスタム アクション)。ただし、アプリケーションのヘッダー (スタイルシート/javascript のインクルードまたはフッターと共に) を取得できません。

確かにナッジをいただければ幸いです...

ありがとう

Rails Composer から作成されたデフォルトのアプリケーション レイアウト。

root@work:/home/hackerkatt/workspace/canopy_portal# cat app/views/layouts/application.html.erb 
<!DOCTYPE html>
<html>
  <head>
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title><%= content_for?(:title) ? yield(:title) : "Canopy Portal" %></title>
    <meta name="description" content="<%= content_for?(:description) ? yield(:description) : "Canopy Portal" %>">
    <%= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track' => true %>
    <%= javascript_include_tag 'application', 'data-turbolinks-track' => true %>
    <%= csrf_meta_tags %>
  </head>
  <body>
    <header>
      <%= render 'layouts/navigation' %>
    </header>
    <main role="main">
       <%= render 'layouts/messages' %>
       <%= yield %>
    </main>
  </body>
</html>

これが私のアプリのレイアウトです。コントローラーのビューがあると思います。ただし、アプリケーション レイアウトなしでレンダリングされます。

root@work:/home/hackerkatt/workspace/canopy_portal# 木アプリ/

<pre>
  app/
  ├── assets
  │   ├── images
  │   │   ├── bg_header.jpg
  │   │   ├── bullet1.gif
  │   │   ├── bullet2.gif
  │   │   ├── green_indicator.png
  │   │   ├── rails.png
  │   │   ├── red_indicator.png
  │   │   └── yellow_indicator.png
  │   ├── javascripts
  │   │   ├── application.js
  │   │   ├── canopy_aps.js
  │   │   └── progressbar.js
  │   └── stylesheets
  │       ├── application.css.scss
  │       └── framework_and_overrides.css.scss
  ├── controllers
  │   ├── application_controller.rb
  │   ├── canopy_aps_controller.rb
  │   ├── concerns
  │   └── visitors_controller.rb
  ├── helpers
  │   ├── application_helper.rb
  │   ├── layout_helper.rb
  │   └── link_to_function_helper.rb
  ├── mailers
  ├── models
  │   ├── canopy_aps.rb
  │   ├── concerns
  │   ├── gestio.rb
  │   └── user.rb
  ├── services
  │   └── create_admin_service.rb
  └── views
      ├── canopy_aps
      │   ├── index.html.erb
      │   ├── registered_sms.html.erb
      │   └── show.html.erb
      ├── devise
      │   ├── passwords
      │   │   ├── edit.html.erb
      │   │   └── new.html.erb
      │   ├── registrations
      │   │   ├── edit.html.erb
      │   │   └── new.html.erb
      │   └── sessions
      │       └── new.html.erb
      ├── layouts
      │   ├── application.html.erb
      │   ├── _messages.html.erb
      │   ├── _navigation.html.erb
      │   └── _navigation_links.html.erb
      └── visitors
          └── index.html.erb
</pre>

ここに訪問者コントローラーと canopy_aps コントローラーがあります

root@work:/home/hackerkatt/workspace/canopy_portal# cat app/controllers/visitors_controller.rb 
class VisitorsController < ApplicationController
end
root@work:/home/hackerkatt/workspace/canopy_portal# cat app/controllers/canopy_aps_controller.rb
class CanopyApsController < ApplicationController
  before_filter :authenticate_user!

  def initialize
    @apname = ''
  end

  def index
    canopy_aps = Gestio.getAPList()
    @canopy_aps = CanopyAPS.organize(canopy_aps)
  end

  def show
    ip = int2IPOctet(params[:id])
    @apip = ip
    @apname = params[:apname]
    @ap = CanopyAPS.getAPSubscribers(ip)
    @reg_subs = @ap.count
  end

  def registered_sms
    @canopy_aps = Gestio.getAPList()
    @reg_subs = CanopyAPS.getRegSMCounts(@canopy_aps)
    @totals = CanopyAPS.totalsByComp(@reg_subs)
  end
end

完全を期すために、関連するビュー...

root@work:/home/hackerkatt/workspace/canopy_portal# cat app/views/visitors/index.html.erb 
<h3>Welcome</h3>
root@work:/home/hackerkatt/workspace/canopy_portal# cat app/views/canopy_aps/index.html.erb 
<%= stylesheet_link_tag 'application' %>

<% title "Canopy Aps" %>
<h2>Canopy AP Listing</h2>
<br />

<div class="container-fluid">
<% @canopy_aps.each do |comp,data| %>
  <div style='margin:0 0 0 20px;'>
    <h2><%= comp.camelcase %></h2>
      <table class="table table-striped" style="width:700px;">
        <thead>
          <th>AP</th>
          <th>IP Addr</th>
          <th>Log into SM</th>
        </thead>
        <tbody>
          <% data.each do |ap| %>
            <tr>
              <td><%= ap.host_descr %></td>
              <td><%= int2IPOctet(ap.ip) %></td>
              <td><%= link_to "Get Subscriber List", canopy_ap_path(:id=>ap.ip, :apname=>ap.host_descr) %></td>
            </tr>
          <% end %>
        </tbody>
      </table>
    <div>
  </div>
<% end %>

render layout: "application" をアクションに追加すると、アプリケーション レイアウトがレンダリングされ、その後にアクション ビューが続きます。そして、これを各アクション/メソッドに追加して、アプリケーション レイアウトをレンダリングする必要があります。Web で見つかったいくつかの投稿で提案されたのは、コントローラーの上部で「レイアウト "アプリケーション"」を使用することでしたが、これは機能しません。また、注意してください。訪問者コントローラー (アクションが定義されていないため、既定のインデックス ビューをレンダリングする) にインデックス アクションを追加すると、アプリケーション レイアウトのレンダリングが中断され、レンダリングされるのは訪問者のインデックス ビューだけになります。これを理解したいと思います。

class CanopyApsController < ApplicationController
  before_filter :authenticate_user!

    def initialize
        @apname = ''
    end

  def index
    canopy_aps = Gestio.getAPList()
    @canopy_aps = CanopyAPS.organize(canopy_aps)
    render layout: "application"
  end

  def show
    ip = int2IPOctet(params[:id])
    @apip = ip
    @apname = params[:apname]
    @ap = CanopyAPS.getAPSubscribers(ip)
    @reg_subs = @ap.count
    render layout: "application"
  end    

end
4

0 に答える 0