Волшебство и Простая Форма реализации

Долгое время читатель первый раз пользователь. Я собираю свое первое приложение RoR, и я выделил все, что должно использовать мое приложение, до:-

  • колдовство
  • OmniAuth
  • Банка может
  • твиттер-бутстрап (преобразованный в sass)

и простые формы.

Чисто, понятно и просто.... Нет.

Не могу за всю жизнь интегрировать (что может показаться самым простым из заданий) простые формы с помощью "входа в систему" ​​волшебства, не получая ошибок в поле "Remember_me".

Простые формы не имеют опции simple_form_tag (only simple_form_for), которая лучше всего работает в форме входа из нового метода контроллера сессий. Вместо этого я должен создать экземпляр @user в этом методе, но затем получить ошибки в поле "Remember_me" "неопределенный метод" Remember_Me ""

Любая помощь будет принята с благодарностью.

Я имею в виду Отлично! Огромное спасибо заранее:)

sessions/new.html.erb

<% provide :title, "Log in" %>
<h1>Log in</h1>
<%= simple_form_for @user, :html => { :class => 'form-horizontal' } do |f| %>
  <fieldset>
    <legend>Login</legend>

    <%= f.input :email, input_html: { :maxlength => 100 } %>
    <%= f.input :password, input_html: { :maxlength => 20 } %>
    <%= f.input :remember_me, as: :boolean %>


    <div class="form-actions">
      <%= f.submit nil, :class => 'btn btn-primary' %>
      <%= link_to 'Cancel', users_path, :class => 'btn' %>
    </div>
  </fieldset>
<% end %>

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

2 ответа

Решение

В документации сказано:

form_tag(url_for_options = {}, options = {}, &block)
Starts a form tag that points the action to an url configured with url_for_options just 
like ActionController::Base#url_for. The method for the form defaults to POST.

Это указывает на то, что form_tag предназначен для отправки данных непосредственно на другой URL, обработанный действием контроллера. Действительно, в форме входа RailsTutorial Майкл Хартл используетform_forфункция вместоform_tag,

form_for(:session, url: sessions_path)

По сути, идея заключается в том, что вы отправляете данные для обработки контроллером, а не для записи в базу данных. Поскольку у нас нет модели для пользовательских сессий, мы должны использовать:sessionсимвол вместо@sessionи сообщите форме, куда (по какому URL-адресу) следует отправлять данные.

Я подозреваю, хотя я не уверен, что это должно работать сsimple_form_forтакже. Что-то вроде:

<%= simple_form_for(:session, url: sessions_path) do |f| %>

Обновление: я успешно изменил эталонную реализацию примера приложения для использованияsimple_form_forдля создания новых пользовательских сессий.

Это, конечно, при условии, что контроллер Sessions обрабатывает ваш логин и что у него есть метод, который отвечает на POST (возможно,create). Это действие контроллера, где вы должны обрабатывать логин Волшебства.

Вот документация по Rails дляform_forЕсли вам любопытно

Я тоже пытаюсь это сделать и застреваю. Кажется, что это должно работать, но это вызывает ошибку, когда я отправляю форму входа. Вот как выглядит моя форма:

<h1>Log in</h1>

<%= simple_form_for(:session, url: sessions_path) do |f| %>

    <%= f.error_notification %>

    <%= f.input :email %>
    <%= f.input :password %>
    <%= f.input :remember_me, :as => :boolean %>

    <div class="form-actions">
    <%= f.submit "Login", :class => 'btn btn-primary' %>
    </div>
<% end %>

<%= link_to 'Forgot Password?', new_password_reset_path %>

Не уверен, как заставить это работать. Мой отладочный вывод показывает, что форма пытается отправить правильные данные:

--- !ruby/hash:ActiveSupport::HashWithIndifferentAccess
utf8: ✓
authenticity_token: wGdDEmG91p7RHzWZKLGgMQvKD+XupS1Z557vNDDG6GM=
session: !ruby/hash:ActiveSupport::HashWithIndifferentAccess
  email: lee@example.com
  password: test
  remember_me: '1'
commit: Login
action: create
controller: sessions

Кроме того, я получаю эту ошибку в консоли:

gems/actionpack-3.2.8/lib/action_dispatch/middleware/templates/rescues/routing_error.erb within rescues/layout (0.8ms)

Но у меня есть resources :sessions в моем routes.rb файл.

Другие вопросы по тегам