2016-03-25 2 views
0

Итак, в настоящее время я зарегистрирован в TreeHouse tutorial для Ruby on Rails, но по мере того, как я следую, я изменяю некоторые вещи, которые делаются по своему усмотрению.Как найти пользователя пользователя user_id?

Однако я столкнулся с проблемой, которая заставила меня почесывать голову.

Что я хотел бы сделать, это получить user_id страницы пользователя show. Что сделано в этом учебнике, создайте новое поле для devise, profile_name.

Я пропустил этот шаг, потому что я не хотел, чтобы мои пользователи были идентифицированы таким образом. Я хотел, чтобы они были идентифицированы их "user_id" + "first_name" + "last_name". Выполняя то, что сделал учебник, он достиг того, что создал пользовательские маршруты для каждого отдельного пользователя, зарегистрированного на его сайте, используя их уникальные profile_name. В моем случае это будет "user_id" + "first_name" + "last_name". Если кто-то может пролить свет на это и, надеюсь, также укажет мне на ресурс, который я мог бы узнать по этому вопросу, я бы очень признателен.

Спасибо за чтение и приятный день! : D


Это то, что они имели в учебнике.

class ProfileController < ApplicationController 
    before_filter :authenticate_user!, only: [:show] 

    def show 
    @user = User.find_by_profile_name(params[:id]) 
    //@user = User.find_by_user_id(params[:id]) //my code that I thought would work 
    if @user 
     @statuses = @user.statuses.all 
     render action: :show 
    else 
     render file: 'public/404', status: 404, formats: [:html] 
    end 
    end 
end 

МАРШРУТЫ FILE

Rails.application.routes.draw do 
    get '/:id', to: 'profile#show' 

ответ

1

Вы, вероятно, нужно иметь косую черту, чтобы отделить свой идентификатор/first_name/last_name Params. Причина в том, что, скажем, чей-то идентификатор заканчивается как 105johnsmith - ну, как вы знаете, что их имя не было введено как 5joh, а их фамилия как nsmith, оставив их id как 10, а не 105? Вы этого не сделаете.

Однако, если вы хотите предположить, что первые цифры идентификатора на самом деле являются идентификатором пользователя, тогда вам просто нужно взять все, что находится в params[:id] и extract the integer id from the string.

Так вы есть код:

id = params[:id].scan(/\d+/).first 
@user = User.find_by_profile_name(id) 

Если вы хотите изменить имя вашего параметра :id, вы могли бы, но это не требуется для того, чтобы работать.

И если вы хотите идти вниз (более разумный) путь положить косую черту между параметрами (для URL, как /105/john/smith или даже /105/johnsmith), то вы бы просто изменить свои маршруты, чтобы быть:

get '/:id/:first_name/:last_name', to: 'profile#show' # maps /105/john/smith 
# or 
get '/:id/:full_name', to: 'profile#show' # maps /105/johnsmith 

И вы можете оставить код в своем контроллере точно таким же.

0

Чтобы найти идентификатор пользователя из коробки:

пользователей Показать контроллер: @user = User.find(params[:id])

В ПОЛЬЗОВАТЕЛЕЙ show.html.erb: <p><%- @user.id %><p>

Смежные вопросы