Волшебство и Простая Форма реализации - PullRequest
1 голос
/ 11 марта 2012

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

  • Колдовство
  • OmniAuth
  • CanCan
  • twitter-bootstrap (преобразован в 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 ]

1 голос
/ 22 марта 2012

Документация гласит:

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, если вам интересно.

0 голосов
/ 16 сентября 2012

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

<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.

...