Am I doing it the right way?

Hello, I'm totally new to RoR but I work with PHP and Java for a
while (7 years)... I'm getting used to Ruby and I'd like to know if
the code below is "right". It is the "show" page of the Users table...

<p>
  <b>Email:</b>
  <%=h @user.email %>
</p>

<p>
  <b>Password:</b>
  <%=h @user.password %>
</p>

<p>
  <b>Role:</b>
  <%=h Role.find(@user.role_id).name %> ==========> This
line, is it right? Is there a better way to do it?
</p>

<%= link_to 'Edit', edit_user_path(@user) %> |
<%= link_to 'Back', users_path %>

Thank you!

typically you would have an association between users and roles so
that you could do user.role

Fred

As @Fredrick said, you can do something like
in user.rb
has_many :roles (or has_one :role)
and in role.rb
belongs_to :user

so in your controller you’d call user.role.name (or user.roles.first.name if you have many roles and want to get the first).

From what you have I worry if Role.find returns a null object so you’d get an exception unless you have validations when you create your objects to make sure every user has a role. To solve this you can add a “unless” statement: <%=h Role.find(@user.role_id).name unless Role.find(@user.role_id).nil? %> which means that it won’t try to get the name if it returned a nil so you’d avoid the problem.

Alan Sikora wrote:

  <b>Email:</b>

...

  <b>Password:</b>

...

  <b>Role:</b>

Would probably be better as:
   <strong>Email:</strang>
...
   <strong>Password:</strong>
...
   <strong>Role:</strong>

Long live CSS!