ruby on rails - Why root route not working with users#show? -
i tried root route root 'users#show' user taken profile upon logging in, instead i'm confronted error:
activerecord::recordnotfound in userscontroller#show couldn't find user 'id'= @user = user.find(params[:id]) when use profile own tab via, <li><%= link_to "profile", current_user %></li> works, can't put root 'current_user' or error:
argumenterror missing :action key on routes definition, please check routes. root 'current_user' thank time.
actually, error message you've provided points problem.
if have root defined you've mentioned root "users#show" executes show action of userscontroller, if have action implemented "the standard way":
def show @user = user.find(params[:id]) end it fails here, because there no params[:id]. value fetched url. if you're pointing url:
localhost:3000/users/1 the params[:id] has value "1".
because you're trying point root_path:
localhost:3000 there no param :id bound, thus:
user.find(params[:id]) throws exception.
if want have "the proper way", modify config/routes.rb:
root "users#profile" "profile" => "users#profile" and inn usercontroller:
class usercontroller < applicationcontroller # ... def profile @user = current_user # or other logic relevant fetching logged in user end end assuming have current_user method implemented, , returns proper user
however, have aware - setting "profile" root cause non-logged in users see error page.
hope helps!
update - moving template partial
you can extract code need app/views/users/show.html.erb. let's say, it's content like:
<h3><%= @user.name %></h3> <small><%= @user.bio %></small> you can extract partial app/views/users/_user_details.html.erb, has content:
<h3><%= user.name %></h3> <small><%= user.bio %></small> please note, @ removed here, , in app/views/users/show.html.erb, can delete code replace with:
<%= render partial: "user_details", locals: { user: @user } %> the same might used in app/views/pages/home.hmtl.erb like:
<% if logged_in? %> <%= render partial: "user_details", locals: { user: @user } %> <% end %> assuming, in pagescontroller have like:
class pagescontroller < applicationcontroller def home @user = current_user end end
Comments
Post a Comment