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!