添加新控制器

时间:2015-11-12 02:43:36

标签: ruby-on-rails forms devise

我以前安装并配置了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>

1 个答案:

答案 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