Использование Formtastic с Волшебством. Как мне настроить форму входа? - PullRequest
0 голосов
/ 08 ноября 2011

Это в основном не требующая ресурсов форма, но другие примеры, похоже, не работают.Я использую колдовство и formtastic.formtastic прекрасно работает для новой пользовательской формы, но я не могу создать новую сессию ...

<%= semantic_form_for 'sessions', :url => sessions_path, :method => :post do |f| %> <%= f.inputs do %> <%= f.input :email %> <%= f.input :password %> <% end %> <%= f.buttons %> <% end %>

это близко, но выдает

<input id="sessions_email" name="sessions[email]" type="text" />

вместо

<input id="sessions_email" name="email" type="text" />

, поэтому, когда я отправляю форму, я получаю шаблон с ошибкой

`Templateотсутствует

Отсутствует шаблон сессий / создание, применение / создание с {: handlers => [: erb,: builder,: coffee],: format => [: html],: locale => [: en,: en]}.`

Полагаю, мне просто нужно знать, как конкретно установить атрибут 'name' формы, но это похоже на хак.Есть ли более «семантический» способ сделать это?пожалуйста помогите спасибо.

РЕДАКТИРОВАТЬ: вот код контроллера для запроса ...

class UsersController < ApplicationController
  before_filter :authenticate, :except => [:show, :new, :create]
  before_filter :correct_user, :only => [:edit, :update]
  before_filter :admin_user,   :only => :destroy


  def index
    @title = "All users"
    @users = User.paginate(:page => params[:page])    
  end

  def show
    @user = User.find(params[:id])
    @microposts = @user.microposts.paginate(:page => params[:page], :per_page => 6)
    @title = @user.name
  end

  def new
    @user = User.new
    @title = 'Sign up'  
  end

  def create
    @user = User.new(params[:user])
    if @user.save
      Notifier.registration_confirmation(@user).deliver
      sign_in @user
      flash[:success] = "Welcome!"
      redirect_to @user
    else
      @title = "Sign up"
      render 'new'
    end
  end

  def edit
    @user = User.find(params[:id])
    @title = "Edit user"
  end

  def update
    @user = User.find(params[:id])
    if @user.update_attributes(params[:user])
      flash[:success] = "Profile updated."
      redirect_to @user
    else
      @title = "Edit user"
      render 'edit'
    end
  end

  def destroy
    User.find(params[:id]).destroy
    flash[:success] = "User Removed"
    redirect_to users_path
  end

  def following
    @title = "Following"
    @user = User.find(params[:id])
    @users = @user.following.paginate(:page => params[:page])
    render 'show_follow'
  end

  def followers
    @title = "Followers"
    @user = User.find(params[:id])
    @users = @user.followers.paginate(:page => params[:page])
    render 'show_follow'
  end

  private

    def has_valid_signup_code?(code)
      code == valid_signup_code
    end

    def correct_user
      @user = User.find(params[:id])
      redirect_to(root_path) unless current_user?(@user)
    end

    def admin_user
      redirect_to(root_path) unless current_user.admin?
    end

end

спасибо!

1 Ответ

0 голосов
/ 23 декабря 2011

Вероятно, вы пропустили какое-то перенаправление после успешного входа в систему. Вот как выглядит действие создания в моем контроллере сессий (обратите внимание, мой контроллер называется UserSessionsController, а не SessionsController):

def create
  if @user = login(params[:session][:email], params[:session][:password])
    redirect_back_or_to root_path, :notice => I18n.t("user_sessions.login_success")
  else
    flash.now[:alert] = I18n.t("user_sessions.login_failure")
    render :action => :new
  end
end

А это форма входа в систему:

= semantic_form_for 'session', :url => user_sessions_path do |f|
  = f.inputs do
    = f.input :email
    = f.input :password

  = f.buttons do
    = f.commit_button
...