2015-07-13 2 views
1

Я видел много сообщений о том, как сопоставить 2 поля формы с одним полем модели, но как насчет отображения поля 1 формы, чтобы предоставить ответы для двух (или более) модельные поля? У меня есть форма для пользователей, которая дает поле, last_name, для пользователя. Но я хочу, чтобы пароль по умолчанию для этого пользователя также был last_name (и у меня есть настройка password_confirmation, так что также должно быть last_name). Как мне это сделать?Rails отображает одно поле в форме для двух полей в модели

Форма:

<div class="row"> 
    <div class="col-md-6 col-md-offset-3"> 
    <%= form_for(@user) do |f| %> 

     <%= f.label :first_name %> 
     <%= f.text_field :first_name, class: 'form-control' %> 

     <%= f.label :last_name %> 
     <%= f.text_field :last_name, :password, :password_confirmation, 
         class: 'form-control' %> 

     <%= f.label :email %> 
     <%= f.email_field :email, class: 'form-control' %> 

     <%= f.hidden_field :access_level, :value => "Chair" %> 

     <%= f.label :Phone %> 
     <%= f.text_field :phone_number, :id => "phone", class: 'form-control' %> 


     <p>&nbsp;</p> 
     <div class="col-md-12"> 
     <%= f.submit "Add Chair", class: "btn btn-primary" %> 
     </div> 
    <% end %> 
    </div> 
</div> 

user_controller.rb

def create 
    @user = User.new(user_params) 
    if @user.save 
     log_in @user 
     current_user 
     flash[:success] = "Welcome to the Penn Model Congress!" 
     redirect_to after_sign_in_path 
    else 
     render 'new' 
    end 
    end 

    private 

    def user_params 
     params.require(:user).permit(:first_name, :last_name, :email, :password, 
            :password_confirmation, :access_level, 
            :phone_number) 
    end 
end 

ответ

1

Я хотел бы добавить before_validationcallback к User модели, как это:

# in app/models/user.rb 
before_validation :set_default_password 

private 
    def set_default_password 
    self.password    ||= last_name 
    self.password_confirmation ||= last_name 
    end 
0

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

Вид:

<%= f.text_field :last_name, class: 'form-control' %> 

Контроллер:

def create 
    @user = User.new(user_params) 
    @user.password = @user.last_name 
    @user.password_confirmation = @user.last_name 
    if @user.save 
     log_in @user 
     current_user 
     flash[:success] = "Welcome to the Penn Model Congress!" 
     redirect_to after_sign_in_path 
    else 
     render 'new' 
    end 
    end 
Смежные вопросы