초보자를 위한 루비온 레일스 ⑥ 발리 데이 프로듀싱~

9654 단어 RubyRails

개시하다


이번에는 예전 기사의 계속이다.
가능하다면 이전의 보도를 보십시오.
이번에 우리 발리를 배우자.
초보자를 위한 루비 온 레일스 해설 ①
초보자를 위한 루비 온 레일스 해설 ② 링크 만들기~
루비 온 레일스 ③ 초보자 대상 해설
Ruby on rails 초보자를 위한 설명 ④ ~ 명명 규칙 및 form태그 사용법에 대해서~
⑤~데이터베이스 편집 및 삭제

새 컨트롤러 만들기


새로운 컨트롤러를 만들어라.
이번에는 투고를 관리하는 포스터 컨트롤러를 제작한다.터미널에서 다음 코드를 실행하십시오.
rails g controller posts all
all.html.erb 파일에 모든 투고를 표시해 주십시오.
이를 위해 새 발언을 만드는 파일을 만듭니다.new.html.posts 파일에서erb 파일을 만듭시다.

이 new.html.eb 파일로 새로운 투고를 만들다.

새 모델 생성하기


그럼 투고 관리 데이터베이스를 만들자.이번에는 데이터베이스를 전혀 만들지 않았기 때문에 모델부터 만들기 시작했다.
모형은 データベースの情報を操作する仕組み이고 データベースとのやり取りを行うクラス라고도 할 수 있다.
모형은 보통 소문자로부터 시작하는 단수 형식으로 명명된다.왜냐하면 모델은 테이블에 하나만 존재하기 때문이다.
 rails g model post content: string
이렇게 모델을 만들면 데이터베이스의 설계도로 사용되는migration 파일이 만들어진다.
다음 코드를 사용하여 이전 파일을 실행합니다.
rails db:migrate
데이터베이스 컨트롤러에서 만든 테이블을 확인하세요.
rails dbconsole
.table
ar_internal_metadata schema_migrations
posts users
포스터 리스트 만들었는데.아래 코드로 안에 있는 내용을 보세요.
.schema posts
CREATE TABLE IF NOT EXISTS "posts"("id"integer PRIMARY KEY AUTOINCREMENT NOT NULL, "content"varchar, "string"varchar, "created_at"datetime NOT NULL, "updated_at"datetime NOT NULL);

발언 작성


new.html.erb 파일에 발언을 만드는 코드를 추가합니다.
new.html.erb
<%= form_tag("/posts/create") do  %>  
  <textarea name="content" cols="30" rows="10"></textarea>
  <input type="submit" value="送信">
<% end %>

이름이 /posts/create인 URL에 post 요청을 보냅니다.param[:content]에서texttarea 내부의 데이터를 저장하고 발송합니다.
라우팅은 다음과 같습니다.
routes.rb
post "posts/create" => "posts#create"
posts 컨트롤러로 연결되는create 동작입니다.textarea의 데이터를posts표에 저장하기 위해posts 컨트롤러를 다음과 같이 인코딩합니다.
posts_controller.rb
def create
  post = Post.new(content: params[:content])
  post.save
  redirect_to("/posts/new")
end
이렇게 하면posts표에 데이터를 저장할 수 있다.
다음처럼textarea를 기입하고 발송 버튼을 누르세요.

데이터베이스 확인해봐.종착역에서 다음 코드를 입력하세요.
rails dbconsole
.header on
select * from posts;
id|content|string|created_at|updated_at
1|pocomaru||2020-05-23 10:37:51.509719|2020-05-23 10:37:51.509719
이렇게 하면 데이터베이스에 발언을 저장할 수 있습니다.

설정 확인


검증은 데이터베이스에 데이터를 저장할 때 필요한 제약이다.
예를 들어 어떤 사이트에 접속할 때 메일 주소와 비밀번호가 비어 있어도 접속할 수 있다면 위험하다.
그런 일을 막기 위해 존재한다.
검증을 모델로 설정합니다.
실제로 설정해 보세요.

공허한 투고를 방지하다


공허한 투고 방지의 유효성을 고려하다.
투고한 것이posts표이기 때문에 이 검증은post모델의 Post클래스 내부에 써야 합니다.
post 모델은 기본적으로 다음과 같습니다.
post.rb
class Post < ApplicationRecord
end
유효성 검사는 다음 형식으로 작성됩니다.validates :カラム名, {検証内容}공투고 방지의 유효기간은 다음과 같다.
post.rb
class Post < ApplicationRecord
end
유효성 검사는 다음 형식으로 작성됩니다.validates :カラム名, {検証内容}공투고 방지의 유효기간은 다음과 같다.
post.rb
class Post < ApplicationRecord
    validates :content, {presence: true}
end
이렇게 하면 빈 투고를 방지할 수 있다.
발리 데이를 만나면 save를 할 수 없어요.또한, save가 성공하면 True는 되돌아오는 값으로, save가 실패하면False는 되돌아오는 값으로 돌아온다.
posts 컨트롤러를 다음과 같은 내용으로 변경합니다.
posts_controller.rb
def create
  post = Post.new(content: params[:content])
  if post.save
    redirect_to("/posts/all")
  else
    redirect_to("/posts/new")
  end
이렇게 코드를 다시 쓰기를 통해save가 성공했을 때 방향을 바꾸고/posts/all,save가 실패했을 때 방향을 바꾸기/posts/new.
이렇게 하면 공백을 배제하는 투고의 유효성을 만들어 낼 수 있다.
다음은 일정 수량 이상의 문자를 삭제하는 검증을 만들어 보자.

일정 수량 이상의 문자를 방지하다


이번에는 20자 이상의 투고를 방지하는 유효기간을 설정하자.
아래와 같다.
post.rb
class Post < ApplicationRecord
    validates :content, {presence: true}
    validates :content, {length: {maximum: 20}}
end
이 부분validates :content, {length: {maximum: 20}}을 통해 20자 이상 발언을 제한할 수 있다.
하지만 이처럼 유효기간만 설정하면 문제가 생긴다.20자 이상의 투고를 할 때textarea는 비어 있다.
이유는posts 컨트롤러다.알림 redirect_to("/posts/new") 이 있을 때, 루트를 통해posts 컨트롤러의 new 동작을 실행합니다.그럼 실례 변수 new.html.eb 파일에 보낼 수 없기 때문에 열심히 쓴 textarea가 비어 있습니다.
이런 상황을 방지하기 위해render 방법을 사용한다.
렌더는 렌더링할 수 있는 방법입니다. 렌더링은 브라우저에서view 파일을 읽어서 그리는 것을 말합니다.
view 파일에서render 방법을 사용하면 여러 개의view 파일의 공통 부분을 그리는 템플릿을 사용할 수 있습니다.
이번에는 컨트롤러 내부에서 사용해서 동작을 거치지 않고 렌더링을 통해 제작된 실례 변수를view 파일에 전달할 수 있습니다.
posts 컨트롤러를 다음과 같은 내용으로 변경합니다.
def create
  post = Post.new(content: params[:content])
  @content = params[:content]
  if post.save
    redirect_to("/posts/all")
  else
    render("posts/new")
  end
end
@content에 발언 내용을 저장한 후 Redirectto new 대신 render를 사용합니다.html.erb 파일을 그리는 중입니다.
이렇게 하면 실례 변수에서 업데이트할 수 있다@content.html.eb에게 맡길 수 있습니다.
new.html.erb 파일에 이 실례 변수를 표시하기 위해서 다음과 같이 덮어씁니다.
new.html.erb
<%= form_tag("/posts/create") do  %>  
  <textarea name="content" cols="30" rows="10"><%= @content%></textarea>
  <input type="submit" value="送信">
<% end %>
@contenttextarea의 초기값에 건네줍니다.이렇게 하면 발리에서 날이 멈췄을 때 그 값을 표시할 수 있다.
실제로 해보세요.

아래와 같이 20개 이상의 문자를 입력하고 발송을 누르세요.

별다른 변화는 없다.

끝맺다


이번엔 여기까지.
만나줘서 고마워요.
가능하다면 아래의 보도를 보십시오.
초보자를 위한 루비온 레일스 해설] ~ 플래시 설치~

좋은 웹페이지 즐겨찾기