ラピッドベースアプリのレールコンポーザーで遊んでいます。ホームページで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