Ror cz. 6 – flash[:notice]

Często w kodzie kontrolera widać użycie flash, np.:

flash[:notice] = "Author saved"

Powoduje to wyświetlenie komunikatu dla użytkownika przy najbliższym wyświetleniu jakiejkolwiek strony. I tylko przy najbliższym, czyli komunikat pokaże się raz.

Użycie flash można dodać jako parametr do redirect_to. Czyli zamiast linii:

flash[:notice] = "Author saved"
redirect_to authors_path

Można napisać w jednej lini:

redirect_to authors_path, notice: "Author saved"

Wyświetlenie komunikatu na stronie, musi być uwzględnione w kodzie widoku. Najlepiej jak mamy to zapisane w: /views/layouts/application.html.erb. Np. tak:

<% if flash[:notice].present? %>
  <div class="alert alert-success">
    <%= flash[:notice] %>
  </div>
<% end %>

Nie jest to najlepszy kawałek do obsługi komunikatów, bo zamiast notice, możemy użyć też alert, czy nawet abc. I tu uwaga, możemy napisać:

flash[:abc] = "message"

Ale w redirect_to, możemy użyć tylko notice i alert. Żeby móc używać nasze abc w redirect_to, trzeba w /controllers/application_controller.rb dodać linię:

add_flash_types(:abc)

MacOs i .NET Core

Chciałem dzisiaj sprawdzić kilka linijek w C#, a pod ręką miałem tylko MacBook Air. Stwierdziłem, że sprawdzę, jak szybko uruchomię kawałek kodu w C#. Ściągnąłem ze stron MS .NET Core 3.1 SDK dla MacOs i zainstalowałem. W terminalu uruchomiłem:

dotnet --version

I dostałem:

3.1.100

No, jest nieźle. Wykonałem:

dotnet new console -o FirstAppConsole
cd FirstAppConsole
dotnet run

I zobaczyłem nieśmiertelny: „Hello world!”. Nieźle, nieźle, bo zajęło mi to ok. 15 min.

A wracając trochę do początku, to chciałem sprawdzić, jak za pomocą Regex zweryfikować, czy istnieje w ciągu conajmniej jeden z szukanych wyrazów. Poniżej rozwiązanie:

            string regexPattern = @"(\bMój\b|\btest\b)";
            string myString = "Mój testowy ciąg znaków";

            bool isOk = Regex.IsMatch(myString, regexPattern, RegexOptions.IgnoreCase);
            Console.WriteLine(isOk);

Update. Pierwsza linia w przykładzie, może wyglądać tak:

            string regexPattern = @"\b(Mój|test)\b";

Ror cz. 5 – usuwanie

W kontrolerze interesuje nas metoda:

  # DELETE /authors/1
  # DELETE /authors/1.json
  def destroy
    @author.destroy
    respond_to do |format|
      format.html { redirect_to authors_url, notice: 'Author was successfully destroyed.' }
      format.json { head :no_content }
    end
  end

I to właściwie wszystko, bo dla usuwania obiektu, domyślnie nie generuje się nowy widok. Wywołanie usuwania jest pod linkiem, który znajduje się na widoku listy autorów (Ror cz. 3 – kontrolery i widoki)

Najprostszy model mamy za sobą, czas przejść do modeli powiązanych relacją, ale to w kolejnej części.