【问题标题】:Rails is not rendering my application layoutRails 没有呈现我的应用程序布局
【发布时间】:2012-02-10 13:36:43
【问题描述】:

我刚刚在 Rails 3.1.1 中创建了一个新的 rails 应用程序,并且我的应用程序布局没有在浏览器中呈现。唯一呈现的是我放在视图中的代码(例如views/public/home.html.erb)。

它只渲染通过 传输的内容。例如,localhost:3000/public/home 只显示这个:

<h1>Homepage</h1>
<h2>Here we go.</h2>

<a href="/#">Visit the login page</a>

这是我的 /layouts/application.html.erb 中的内容:

<!DOCTYPE html>
<html>
<head>
  <title>My App</title>
  <%= stylesheet_link_tag    "application" %>
  <%= javascript_include_tag "application" %>
  <%= csrf_meta_tags %>
</head>
<body>

  <ul class="user_nav">
  <% if current_user %>

      <li>
        Logged in as <%= current_user.email %>.
      </li>
      <li>
        <%= link_to "Log out", logout_path %>
      </li>
  <% else %>
      <li>
        <%= link_to "Sign up", signup_path %>
      </li>
      <li>
        <%= link_to "Log in", login_path %>
      </li>
  <% end %>
  </ul>


  <% flash.each do |name, msg| %>
    <%= content_tag :div, msg, :id => "flash#{name}" %>
  <% end %>

  <%= yield %>

  <h1>test!</h1>


</body>
</html>

这也是我的路线:

 root :to => "public#home"
  match "/secret" => "public#secret"


  get "logout" => "sessions#destroy", :as => "logout"
  get "login" => "sessions#new", :as => "login"
  get "signup" => "users#new", :as => "signup"
  resources :users
  resources :sessions

这是 application_contoller.rb 中的内容:

class ApplicationController < ActionController::Base
  protect_from_forgery

end

这是 public_controller.rb 中的内容:

class PublicController < ActionController::Base
  protect_from_forgery

  def home
  end

  def secret
  end
end

以下是 sessions_contoller.rb 中的内容:

class SessionsController < ApplicationController
  def new
  end

  def create
    user = login(params[:email], params[:password], params[:remember_me])
    if user
      redirect_back_or_to root_path, :notice => "Logged in!"
    else
      flash.now.alert = "Email or password was invalid"
      render :new
   end
  end

  def destroy
    logout
    redirect_to root_path, :notice => "Logged out"
  end
end

这就是 users_controller.rb 中的内容:

class UsersController < ApplicationController
  def new
    @user = User.new
  end

  def create
    @user = User.new(params[:user])
    if @user.save
      redirect_to root_path, :notice => "Signed up!"
    else
      render :new
    end
  end

end

【问题讨论】:

  • 另外,我已经开始设置 Sorcery,它会在 session/new 中呈现应用程序,但不会在我的 public#home 操作中呈现。
  • 再次阅读您的问题,如果您不说“嗯?”,请告诉我。 :) 请出示您的views/layouts/application.html.erb 文件。您是使用默认布局还是在每个控制器中指定它?
  • 这完全是胡言乱语。对于那个很抱歉。我清理了问题并添加了我的 layouts/application.html.erb 文件。我正在尝试使用默认布局,并且没有在任何控制器中指定任何布局。
  • 奇怪。布局是 /app/views/layout/application.html.erb' 并且没有 :layout =&gt; false 吗?你的其他普通视图文件夹有用吗?
  • 是的,它在 /app/views/layouts/application.html.erb 中并且没有 :layout => false。奇怪的是它在 /sessions/new 中工作,这是巫术登录页面,但不在任何其他视图上。

标签: ruby-on-rails ruby-on-rails-3


【解决方案1】:

在最后一个问题上遇到了同样的问题:我在子类控制器中覆盖了初始化。确保首先调用“超级”:

def initialize
    super
    @some_client = SomeClient.new
end

【讨论】:

    【解决方案2】:

    我自己也遇到了同样的问题,问题只是一个简单的错误。

    您的控制器 PublicController 是“ActionController::Base”的子类。 ApplicationController 以外的控制器需要从 ApplicationController 子类化,以便在 application.html.erb 布局中呈现它们的视图

    如果你改变了

    PublicController < ActionController::Base
    

    PublicController < ApplicationController
    

    它应该可以工作。

    【讨论】:

    • 有时会发生 :)
    • 哦,是的,你去@knt。 ?
    猜你喜欢
    • 1970-01-01
    • 2012-12-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-23
    • 1970-01-01
    相关资源
    最近更新 更多