Reading programming phoenix with phoenix 1.6

Hello people

I began reading programming phoenix which is for phoenix 1.4 but Im using phoenix 1.6.
I found in chapter 3

At this point, it’s worth emphasizing that a view in Phoenix is just a module, and templates are just functions.
Chris McCord, Bruce Tate, José Valim. Programming Phoenix ≥ 1.4 (Kindle Locations 1846-1847).

​iex> ​ view = 
RumblWeb.UserView.render(​ " ​​ user.html" ​, ​ user: ​ user) ​ {:safe, [[[[["" | "<strong>"] | "José"] | "</strong> ("] | "1"] | ")\n"]} ​ ​ ​ 

iex> ​ Phoenix.HTML.safe_to_string(view) ​ "<strong>José</strong> (1)\n" 

but when I execute this in 1.6 i get

iex(2)> view = RumblWeb.UserView.render("user.html", user: user)
  dynamic: #Function<2.48691599/1 in RumblWeb.UserView."user.html"/1>,
  fingerprint: 180091408340993206255584356524086951088,
  root: false,
  static: ["\n<b> ", " </b> (", ")\n"]

I see I can do view.dynamic.("foo") and I get the ["jose", "1"]

But I im just lost… whats going on now? and is there a way to do Phoenix.HTML.safe_to_string in 1.6?



Following the book, do you know what is LiveView at this point? If not it may be best to start over with generating your project with phoenix 1.5 (not sure how to downgrade the generator but it should be possible), or with 1.6 but without LiveView using mix --no-live

One thing I highly recommend when going through tutorials is to use the same version of the software the tutorial uses.

It will save you a lot of time with headaches or questions like this. The short answer is now you’re looking at something related to LiveView, which didn’t exist in Phoenix 1.4.

After completing the tutorial or book, you’ll have a better understanding than you did going in and will be in a much better position to upgrade your app, following the upgrade guides that come with releases.