我以前安装并配置了devise
,它运行正常。表格运作良好。然后我添加了一个新的StaticPages
控制器:
rails g controller StaticPages index landing about contribute
我设置了routes.rb
:
Rails.application.routes.draw do
devise_for :users
resources :cards
root 'static_pages#index'
get 'static_pages/landing' => 'static_pages#landing'
get 'static_pages/about' => 'static_pages#about'
get 'static_pages/contribute' => 'static_pages#contribute'
unauthenticated do
root to: 'static_pages#landing', :as => 'unauthenticated'
end
end
此后users/sign_in
呈现devise
页面,但表单无法点击。我点击它们,它们不突出显示也不允许输入文本。不过,我可以tab
通过表单输入凭据并按enter
登录。为什么表单不再有效?
以下是登录表格:
<body id="sign-in">
<div class="wrapper-center">
<div class="container-form">
<div class="container-fields">
<h2 class="light-text">Sign in</h2>
<%= form_for(resource, as: resource_name, url: session_path(resource_name)) do |f| %>
<div class="field">
<%= f.email_field :email, autofocus: true, placeholder: "Email" %>
</div>
<div class="field">
<%= f.password_field :password, autocomplete: "off", placeholder: "Password" %>
</div>
<% if devise_mapping.rememberable? -%>
<div class="field remember-me">
<div class="checkbox">
<%= f.check_box :remember_me %>
</div>
<div class="checkbox-label">
<%= f.label :remember_me %>
</div>
</div>
<% end -%>
<div class="actions">
<%= f.submit "Sign in" %>
</div>
<% end %>
</div>
</div>
<div class="devise-links">
<%= render "devise/shared/links" %>
</div>
</div>
</body>
答案 0 :(得分:1)
如果没有进一步的代码,很难诊断,但可能与它有关:
<body id="sign-in">
为什么在<body>
中添加views
代码?
当你有一个Rails应用程序时,你有两个&#34;级别&#34;视图 - 布局和视图。
布局是整个页面的包装器;是您放置<body>
标签的地方。 视图是该特定页面的特定代码。
因此,我希望看到以下内容:
#app/views/layouts/application.html.erb
....
<body>
<%= yield %>
#app/views/devise/sessions/new.html.erb
<div class="container-form">
<div class="container-fields">
<%= form_for ... %>
同样,我只能假设您在视图中包含<body>
。我没有任何其他参考资料。
-
您有HTML问题的想法实际上与您的问题一致 - 它与您的表单的交互是一个问题,而不是提交。
如果您遇到Rails问题,则无法登录。因此,可能表示呈现表单的方式存在问题,这是HTML&amp; CSS。
顺便说一下,您还应该关注添加non-restful routes(针对您的static pages
):
#config/routes.rb
resources :static_pages, only: :index do
%i(landing about contribute).each do |option|
get :option, on: :collection
end
end
另一个建议是保持那些&#34;静态&#34; 应用程序控制器中的页面:
#config/routes.rb
%w(landing about contribute).each do |option|
get option, to: "application##{option}"
end
...您需要使用ApplicationController
中的相应方法提供支持:
#app/controllers/application_controller.rb
class ApplicationController < ActionController::Base
def landing
...
end