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!