Przekazanie zmiennej do formularza

Panowie, szybkie pytanie początkującego jelenia

mam sobie kontroler w którym mam 2 akcje:

def register
  end

  def create
    if(params[:user][:password] == params[:user][:password_repeat])
      @user = User.create(form_register)
      flash[:notice] = 'Dodano nowego użytkownika'
      @user = params[:user]
      #render "register"
      redirect_to(:action =>'register');
    else
      flash[:notice] = 'Użytkownik nie został dodany'
      @user = params[:user]
      #render "register"
      redirect_to({:action => 'register'});
    end
  end

W przypadku podania złego hasła chciałbym wrócić z powrotem do formularza z emailem tyle że już z wyświetlonymi danymi i tu pojawia się zonk bo pojawia się problem ze zmienną :email w formularzu, kod widoku:

<% if flash[:notice].present? %>
  <div style="font-weight: bold;color:red">
    <%= flash[:notice] %>
  </div>
<% end %>

<%= form_for :user, url: {action: 'create'} do |f| %>

	<table>
		<tr><td><%= f.label :email %></td><td><%= f.text_field :email %></td></tr>
		<tr><td><%= f.label :login %></td><td><%= f.text_field :login %></td></tr>
		<tr><td><%= f.label :password %></td><td><%= f.password_field :password %></td></tr>
		<tr><td><%= f.label :password_repeat %></td><td><%= f.password_field :password_repeat %></td></tr>
		<tr><td></td><td><%= f.submit 'dodaj' %></td></tr>
	</table>

<% end %>

W elsie zamiast redirect_to powinno być render :new
W ogóle to jakiś dziwny ten Twój kod. Na podstawie czego go napisałeś?

@jkrzysiek1507 - dzięki za odpowiedź, na razie po prostu bawię się z różnymi gemami wyświetlaniem komunikatów przekierowaniami itp. więc sam mechanizm działania jest drugorzędny, rozumiem że poprawnie powinienem skorzystać z validatora w modelu password_confirm tak ?

co do kodu:

Problemem okazała się ta linijka powinno być

Tu jest wiele problemów. Dodajesz użytkownika, ale nie sprawdzasz, czy się dodał, tylko wyświetlasz info, że dodano.
Linijka @user = params[:user] nie ma zbyt dużo sensu.

1 Like

Jeszcze jedno pytanie związane z rejestracją, walidacją oraz wykorzystaniem gema bcrypt - przy niewpisaniu hasła gem automatycznie ustawia mi 1 error ‘password can’t be blank’ - jak mogę to wyłączyć / nadpisać swoim własnym komunikatem błędu ?

EDIT:
problem rozwiązany, dla potomnych “jeleni” :wink:

has_secure_password(validations: false)

do sprawdzania czy hasło jest identyko możesz użyć http://guides.rubyonrails.org/active_record_validations.html#confirmation