Creating a `Users` show page using Devise

前端 未结 4 1070
失恋的感觉
失恋的感觉 2020-12-07 09:37

I\'m trying to create a User show page (that will function as a profile page) but am confused about how to do this with Devise. It doesn\'t seem as though Devi

相关标签:
4条回答
  • 2020-12-07 10:30

    showing current_user/ other_user profiles with devise:

    After installing devise

    Create a Users controller:

    rails generate controller Users
    

    Then create a show action and find the user with params id:

    def show
    @user = User.find(params[:id])
    end
    

    Create a show.html.erb file in the User view folder:

    <%= @user.email %>
    

    Linking to users show page:

    <%= link_to "current_user_show", current_user %>
    

    Now if you want to view other profiles create a index action in the users controller:

    def index @users = User.all end
    

    Create an index.html.erb in the User view folder then:

    <% @users.each do |user| %>
    <%= link_to user.username, user %>
    <%= user.email %>
    <% end %>
    

    The link for this will be:

    <%= link_to "show_index_of_users", users_path %>
    

    This will link you to the users index.html.erb file there you will create a loop and link to users profile:

    <% @users.each do |user| %>
    <%= link_to user.username, user %>
    <%= user.email %>
    <% end %>
    

    This should work!

    0 讨论(0)
  • 2020-12-07 10:32

    You should generate a users_controller which inherits from application_controller and define there your custom show method. Don't forget to create a view and routes for it. Ex:

    #users_controller.rb
    def show
      @user = User.find(params[:id])
    end
    
    #in your view
    <%= @user.name %>
    
    #routes.rb
    match 'users/:id' => 'users#show', via: :get
    # or 
    get 'users/:id' => 'users#show'
    # or
    resources :users, only: [:show]
    
    0 讨论(0)
  • 2020-12-07 10:32

    Don't forget that your users routes should be below the devise_for users routes, like this:

    #routes.rb
    devise_for :users
    resources :users, :only => [:show]
    

    Also, if you are using a username or an email as the primary key instead of the usual id, you should avoid routing conflicts by declaring your routes as follow:

    #routes.rb
    devise_for :users, :path_prefix => 'd'
    resources :users, :only => [:show]
    
    0 讨论(0)
  • 2020-12-07 10:41

    you can generate the views used by devise, so you can change it as you want to.

     rails g devise:views
    
    0 讨论(0)
提交回复
热议问题