2015-06-22 4 views
0

У меня есть два частичных вида для двух разных форм регистрации. На моей домашней странице, основанной на ссылке один нажимает на, я рендеринг соответствующей формы. (Вид/приложение/индекс)рендеринг частичных элементов в контроллере после проверки проверки

= link_to 'Mentor', new_user_path(user_role: true), :class =>'btn' 
= link_to 'Mentee', new_user_path, :class =>'btn' 

В просмотрах/пользователях/new.html.haml, я проверяя роль пользователя и перенаправление на соответствующую форму.

- if params[:user_role] 
= render 'mentor' 
- else 
= render 'mentee' 

В пользовательской модели я добавил подтверждение следующим образом.

class User < ActiveRecord::Base 
    email_regex = /\A[\w+\-.][email protected]/i 

    validates :cisco_email, :presence => true, 
       :format  => { :with => email_regex,} 
    validates :work_city, :presence => true 

end 

Поэтому, если есть какое-либо недопустимое поле, я хочу направить его в ту же форму со флэш-сообщением. Мой контроллер выглядит так.

class UsersController < ApplicationController 

    def index 
    end 

    def show 
     @user = User.find(params[:id]) 
    end 

    def new 
    @user = User.new 
    end 

    def create 
     @user = User.new(params[:user]) # Not the final implementation! 
     if @user.save 
      flash[:success] = "Welcome to the CSG Mentoring Tool!" 
      redirect_to @user 
     else 
     flash[:notice] = "Error regsitering." 

      if params[:user][:user_role] 
         render :partial => 'users/mentor' 
      else 
       render :partial => 'users/mentee' 
      end 
     end 
    end  
end 

Когда запись недействительна поле есть, он перенаправляет на страницу «подопечный», независимо от того, на какой странице сделана ошибка. Также изменяется весь стиль css и вспышка также не отображается

ответ

1

Почему это не работает? , если PARAMS [: пользователь] [: USER_ROLE] визуализации: частично => 'пользователей/наставника еще визуализации: частично => 'пользователей/подопечный' конец

params[:user][:user_role] равна нулю.

Вы можете проверить, используя множество образом:

Над ваш, если условие raise params[:user].inspect

Почему его ноль?

Причина этого Вы передаете new_user_path(user_role: true) user_role true, но user_role не соответствует действительности в форме наставника.

params[:user_role] не будет устанавливать user_role = true поле в виде наставника.

Набор USER_ROLE

<%=f.hidden_field :user_role, value: params[:user_role] %>

Если его должно быть верно и для наставника всегда

<%=f.hidden_field :user_role, value: true %>

По вспышки по умолчанию будет сделать их доступными для следующего запроса, но иногда вы можете для доступа к этим значениям в одном запросе. Reference

Это работает с перенаправлением

flash[:success] = "Welcome to the CSG Mentoring Tool!" 

Это будет работать с рендеринга

flash.now[:success] = "Welcome to the CSG Mentoring Tool!" 
+0

Благодаря @pradeep. Мне было интересно, как установить user_role = true в форме наставника, чтобы этого не произошло. Каким бы способом вы меня ни направляли? – Novice

+0

Спасибо @pradeep. Но я все еще удивляюсь, почему меняется весь макет, когда я обрабатываю частичные элементы контроллера. – Novice

+0

визуализации не перезагружать css и js снова. Это зависит от того, как вы используете css и js в своем приложении. Было бы легко ответить, увидев ваши частичные и как вы включаете css и js .. –

Смежные вопросы