Rails에서 작성한 양식이 DB에 저장될 때까지 데이터 프로세스
개시하다
Rails 자습서 등지에서 Rails를 배우고 표를 작성하여 표에서 데이터를 입력하고 마지막으로 데이터를 DB에 저장한다View
,Controller
,DB
의 데이터 흐름은 이미 배웠기 때문에 총괄한다.
컨디션
이 글은 아래 환경(2018년 6월 26일 시점)에서 동작 확인을 했다.
이 글은 아래 환경(2018년 6월 26일 시점)에서 동작 확인을 했다.
모델
모형의 구성 등은 이전 글에 상세하게 기재되어 있기 때문에 여기서 생략합니다.
경로
라우팅 설정은 다음과 같습니다.
$ rails routes
Prefix Verb URI Pattern Controller#Action
root GET / toppages#index
signup GET /signup(.:format) users#new
users POST /users(.:format) users#create
new_user GET /users/new(.:format) users#new
user GET /users/:id(.:format) users#show
데이터의 흐름을 대략적으로
다음은 웹 응용 프로그램에서 흔히 볼 수 있는 사용자 로그인과 관련된View
,Controller
,DB
의 데이터 절차를 소개한다.대충 말하다
라우팅 설정은 다음과 같습니다.
$ rails routes
Prefix Verb URI Pattern Controller#Action
root GET / toppages#index
signup GET /signup(.:format) users#new
users POST /users(.:format) users#create
new_user GET /users/new(.:format) users#new
user GET /users/:id(.:format) users#show
데이터의 흐름을 대략적으로
다음은 웹 응용 프로그램에서 흔히 볼 수 있는 사용자 로그인과 관련된View
,Controller
,DB
의 데이터 절차를 소개한다.대충 말하다
~/signup
Get
(HTTP 요청)|URL에서 액세스해야 함controller
및 アクション
users#new
@user
)를 보내기View
Post
(HTTP 요청)이므로 URL에서 액세스해야 합니다controller
와 アクション
는 판별users#create
@user
를 DB에 저장사용자가 등록 화면으로 이동하는 링크를 클릭하십시오
예를 들어, 사용자가 새 로그인 버튼을 클릭하면 URL이
~/sigup
인 경우루트에 따라 컨트롤러의 동작을 판단합니다 (new)
URL이
~/sigup
인 경우 어떤 컨트롤러로 가는 경로를 확인한 후 users
컨트롤러의 new
동작으로 판단됨컨트롤러 (users) 동작 (new) 내 처리
/app/controllers/users_controller.rb
def new
@user = User.new
end
User
라는 모델 클래스에서 new
방법으로 신기록의 모델 실례를 만듭니다.이번에는 아무런 데이터가 없기 때문에 여기에 빈 실례를 만들어 실례 변수
@user
를 대체한다.실례 변수를 창에 보내기
View
.여기에는 전진 보기의 지시가 없다.따라서 처리는 기본값
views/users/new.html.erb
으로 진행됩니다.HTML을 만들고 브라우저에 표시
부트스트랩을 기반으로 한 것 같아서 그런 느낌이 든다.
이 테이블에서
users
컨트롤러new
의 작업에서 만들어진 빈 실례에서 사용자가 실제 데이터를 입력하고 DB에 저장하도록 합니다.사용자가 창에 입력하고 사용자 등록 버튼을 누르다
모두 입력하고 등록 버튼을 누르면form내의 정보를 서버에 통합
Post
합니다.개발 도구를 확인해 보세요.그중의 인터넷을 보세요.HTTP의 머리에 있는 정보를 보고 싶다면 (오른쪽) HTTP 방법이 POST라는 것을 알 수 있습니다.
매개 변수를 누르면 폼에서 보낸 데이터를 확인할 수 있습니다.
다음은 날아온 이 부탁이 어떻게 처리되는지 살펴보자.
루트에서 컨트롤러의 동작을 판단합니다 (create)
URL이
~/sigup
인 경우 어떤 컨트롤러로 가는 경로를 확인한 후 users
컨트롤러의 new
동작으로 판단됨users
에서 나온 Post
방법이기 때문에 기본적으로 users
컨트롤러의 create
동작을 처리합니다.컨트롤러 동작 내 처리
app/controllers/users_controller.rb
def create
# ストロングパラメータから精査されたデータだけをインスタンスに格納
@user = User.new(user_params)
# インスタンスの保存に成功した場合の処理
if @user.save
flash[:success] = "ユーザを登録しました"
redirect_to @user
# インスタンスの保存に失敗した場合の処理
else
flash[:danger] = "ユーザの登録に失敗しました"
render :new
end
end
private
def user_params
params.require(:user).permit(:name, :email, :password, :password_confirmation)
end
코드 아래private
는 이후에 정의된 방법이 동작이 아니라 이 분류에서만 사용하는 방법이라는 것을 명확하게 나타낸다.따라서
def user_params
동작이 아니라 단순한 방법이다.또 이 방법은Strong Paramter
이다.이것은 필요한 매개 변수를 파악하여 전송된 데이터를 필터할 수 있다.금번
params.require(:user)
에서 User
는 모델의 형식에서 얻은 데이터와 관련이 있음을 명확히 나타낸다permit
나중에 필터링하지 않고 통과할 열을 지정합니다.데이터베이스 저장
mysql> select * from users;
+----+----------+--------------------+--------------------------------------------------------------+---------------------+---------------------+
| id | name | email | password_digest | created_at | updated_at |
+----+----------+--------------------+--------------------------------------------------------------+---------------------+---------------------+
| 7 | pass7777 | pass7777@gmail.com | $2a$10$Hofz4hjxvF4sors86Q1kZugn/FGdAB/7SE.4/ZTuyfi4aJrItV.Am | 2018-06-25 08:26:05 | 2018-06-25 08:26:05 |
+----+----------+--------------------+--------------------------------------------------------------+---------------------+---------------------+
7 rows in set (0.00 sec)
저장된 것을 확인했습니다. (id1에서 6을 생략했습니다.)이상은!
이 기사를 읽은 사람.
이 기사를 읽고 잘못된 점을 발견하거나 좋은 내용을 보충해 주신다면 편집요청과 평론란에 지적해 주십시오.
참고 자료
Reference
이 문제에 관하여(Rails에서 작성한 양식이 DB에 저장될 때까지 데이터 프로세스), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/ryosuketter/items/29fbf7698a90d5c904d2텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)