Волшебство и Простая Форма реализации
Долгое время читатель первый раз пользователь. Я собираю свое первое приложение 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
файл.