Currently reading the book “Programming Phoenix LiveView”.
At the end of the Chapter 1, I’m trying to solve the guess game. If the user guesses the random number generated by the program the program should say Your guess: #{guess}. Correct!
, but it doesn’t run that condition even if the guessed number is exactly the same as the random_number generated at the time of mount
.
I’ve also added the line The randome number is <%= @random %>
to see if I’m guessing the correct number.
Following is the code.
defmodule PentoWeb.WrongLive do
use PentoWeb, :live_view
def mount(_params, _session, socket) do
{:ok, assign(socket, score: 0, message: "Make a guess:", time: time(), random: random())}
end
def render(assigns) do
~H"""
<h1 class="mb-4 text-4xl font-extrabold">Your score: <%= @score %></h1>
<h2>
<%= @message %>
The randome number is <%= @random %>
</h2>
<br/>
<h2>
<%= for n <- 1..10 do %>
<.link class="bg-blue-500 hover:bg-blue-700 text-white font-bold py-2 px-4 border border-blue-700 rounded m-1" phx-click="guess" phx-value-number= {n} >
<%= n %>
</.link>
<% end %>
</h2>
"""
end
def time() do
DateTime.utc_now() |> to_string()
end
def random() do
Enum.random(1..10)
end
def handle_event("guess", %{"number" => guess}, socket) do
message = cond do
guess == socket.assigns.random ->
"Your guess: #{guess}. Correct!"
true ->
"Your guess: #{guess}. Wrong. Guess again."
end
{:noreply, assign(socket, score: socket.assigns.score + 1, message: message, time: time(), random: socket.assigns.random)}
end
end