【发布时间】: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 => false吗?你的其他普通视图文件夹有用吗? -
是的,它在 /app/views/layouts/application.html.erb 中并且没有 :layout => false。奇怪的是它在 /sessions/new 中工作,这是巫术登录页面,但不在任何其他视图上。
标签: ruby-on-rails ruby-on-rails-3