@user = User.new(user_params) #I didn't see any parameters in the constructor
user_params
- это название метода. В рубине вы можете вызвать метод без записи ()
после имени метода. Если вы посмотрите вниз в нижней части кода вы в курсе, вы можете увидеть определение метода:
private
def user_params
params.require(:user).permit(:first_name, :last_name, :email, :password)
end
end
Этот метод возвращает что-то, и что возвращаемое значение используется в конструкторе. Вы можете увидеть, что возвращаемое значение, добавив следующее в ваш код:
def create
@user = User.new(user_params)
puts '******'
p user_params
puts '******'
...
...
end
Затем смотрите в окне сервера для выхода. Вы увидите что-то вроде:
******
{“first_name"=>”Joe”, “last_name”=>”Smith”, “email”=>”[email protected]”}
*******
params.require
имеет отношение к безопасности. Тема называется strong parameters
, который вы можете прочитать здесь:
https://www.sitepoint.com/rails-4-quick-look-strong-parameters/
if @user.save #Checks if @user was saved?
Да:
По умолчанию save
всегда выполняются валидация. Если какой-либо из них завершится неудачей, действие отменяется, и сохранение возвращает false.
session[:user_id] = @user.id #Creates a session? What's :user_id and @user_id?
Сеанс используется для переменных сохраняется от одного запроса к другому.Сеанс похож на Hash, а :user_id
- это случайный ключ, который вы создаете в Hash. Вы можете назвать ключ чем угодно, но он должен описать данные, которые вы сохраняете.
@user.id
- это значение, которое вы сохраняете в сеансе Hash. id
приходит от пользователя, созданного здесь:
@user = User.new(user_params)
Я вообще в курсе, что это за форму регистрации, но у меня возникают проблемы постигая процессы создания и функции user_params.
Сначала вы используете запрос GET для отображения формы для создания нового пользователя - вы делаете это, введя localhost:3000/users/new
в своем браузере. Это отобразит форму. Тег <form>
имеет атрибут action
, который указывает URL-адрес, в котором форма отправит запрос, сопровождаемый данными.
Если вы используете инструменты разработчика вашего браузера, вы можете нажать на что-то вроде Page Source
, чтобы увидеть необработанный HTML формы, который будет выглядеть примерно так:
<form class="new_user" id="new_user" action="/users" accept-charset="UTF-8" method="post">
...
...
Запрос POST, который отправляется в url /users
направляется на действие create
в UserController. Это потому, что, когда вы объявляете маршрут как:
resources :users
или
resources :photos
Rails использует the chart below для маршрутизации URL-адресов на действия (в данном случае URLs направляются к действиям в PhotosController):
Обратите внимание, что URL /photos
направляется как index
и create
действий. Rails проверяет, является ли запрос GET-запросом или запросом POST, чтобы определить, какое действие выполнить.
За дополнительной информацией, обращайтесь к Rails Guide on routing.
Фактически все это было написано вручную в качестве инструкций. В частности, в классе user_params я не понимаю, откуда пришел пользовательский символ. Мое предположение состоит в том, что: user - это таблица в модуле пользователя, а first_name, last_name и т. Д. - это поля. –
Правильно. ': user' сопоставляется с классом' User', который сопоставляется с таблицей 'users'.Вот почему они называют конфигурацию RoR по конфигурации. Вы не знаете об этом, потому что нет файлов конфигурации, говорящих: пользователь. Вам просто нужно знать, что для класса пользователя требуются поля, все в области «пользователь», когда POSTing в JSON. –