Rails-MessageBoard

5272 단어 Rails

Controller

rails generate controller messages index- route.rb

Model

rails generate model Message name:string body:string- migration file
- 데이터베이스 생성 및 수정 기능
필요 없음 - SQL
- db/schema.rb에 실행된migration 기록하기
  • rails db:migrate
  • resources :messages
  • URL 도우미
    리소스를 자동으로 생성하는 데 필요한 URL의 구조를 나타냅니다.
    link_to에서 사용
    _path의 경우 상대 경로
    _URL을 추가한 경우 "http://~"
  • ERB

    <%= code %> 결과를 문자열로 삽입하기 위해 코드를 실행합니다<% code %> 코드만 실행하고 결과는 삽입하지 않습니다
    * form_for(form helper)
    * 특정 모델 객체를 작성 및 편집하는 데 사용되는 창을 자동으로 생성합니다.
    * 모형 대상을 창과 연결시켜 창에 입력한 값을 모형 대상에게 분배하거나 편집할 때 저장된 값이나 오류를 모형 대상을 통해 창에 표시합니다
    <form class="new_message" id="new_message" action="/messages" accept-charset="UTF-8" method="post">
    
  • routes.rb에 resources :messages의 기술을 추가했기 때문에form메시지 모델의 초기화 대상을 매개 변수로 for에 전달하면 메시지는 URL로POST는 form 태그의 속성으로 path, HTTP 방법으로 자동으로 설정됨
  • 블록 매개 변수의 f는 창 생성기입니다f.text_field :name type = "text"의 input 태그f.text_field :body type = "text"의 input 태그f.submit type = "submit"의 input 태그
  • 제작 절차

    1. フォームに値を入力し送信ボタンを押すと /messages,URLにPOSTでリクエストがパラメータと共に送信される
    2. routes.rbで設定したMessagesControllerのcreateアクションが呼ばれる
    3. createアクションでnameと、bodyが含まれたパラメータ(message_params)を受け取る
    4. Messageモデルのインスタンスを生成(Message.new)する
    5. `@message.save`でDBへ保存
    6. route URLにredirect
    
  • 형식에서 보낸 파라임은 컨트롤러에서 파라임스로 획득
  • { :message => {
        :name => "名前の入力内容",
        :body => "内容の入力内容"
      }
    }
    
  • strong parameter
    의도하지 않은 param을 보낸 상태에서 검증을 진행합니다.부당한 조작을 방지하다.
  •   private
      def message_params
        params.require(:message).permit(:name, :body)
      end
    
    params에 :message 키가 있는지 확인하고, 필터 키는 수신:name:body의 값만 받습니다.

    Bootstrap

    app/views/layouts/application.html.erb app/views/messages/index.html.erb
    <form role="form">
      <%= form_for(@message) do |f| %>
        <div class="form-group">
          <label for="exampleInputEmail1">Name:</label>
          <%= f.text_area :name, :class => "form-control" %>
        </div>
    
        <div class="form-group">
          <label for="exampleInputEmail1">Content:</label>
          <%= f.text_area :body, :class => "form-control" %>
        </div>
        <%= f.submit class: "btn btn-sm btn-primary" %>
      <% end %>
    </form>
    

    Validation

      # 名前は必須入力かつ20文字以内
      validates :name , length: { maximum: 20 } , presence: true
      # 内容は必須入力かつ2文字以上30文字以下
      validates :body , length: { minimum: 2, maximum: 30 } , presence: true
    
    controller→발리 일 실패 시 error
    @messages = Message.all
    flash.now[:alert] = "failed to save"
    render 'index'
    
    보기 - error 메시지 표시
    <% @message.errors.full_messages.each do |full_message| %>
        <li>
            <%= full_message %>
        </li>
    <% end %> 
    

    Update,Delete

      resources :messages, except: [:index, :new]
      #resources :messages, only: [:create, :show, :edit, :destroy, :update]
    

    Link

    link_to Link Name, Link URL <%= link_to "edit" , edit_message_path(message) %> edit_message_path(message)/messages/message.id/edit

    before_action


    필터 기능은 모든 동작의 앞뒤 임의로 처리할 수 있다

    params


    컨트롤러 측면에서 사용자가 폼에서 보낸 파라미터를 수신하는 데 사용되는 산열
  • <%= link_to "edit" , edit_message_path(message) %>→ /messages/message.id/edit
  • GET 액세스messages#edit를 통해 도착

  • 1 대입params[:id] 및 컨트롤러
  • 에 전달
  • @message = Message.find(params[:id])@message = Message.find(1)
  • REST의 디자인은 URL에 필요한 자원을 이렇게 지정할 수 있습니다

    Column 추가

    rails g migration add_age_to_messages age:integer

    model


    added validation

    view


    addedmessage.age <%= f.text_field :age, :class => "form-control" %>

    controller


    added strong parameter

    Error,Debug


    NoMethodError in …

  • 정의된 방법이 없음
  • 올바른 데이터가 입력되지 않음
  • AcitveRecord::RecordNotFound in …

  • DB에 데이터 없음
  • 매개변수 오류
  • Missing Template


    컨트롤러 동작에 해당하는 뷰가 없습니다(ERB 파일).

    Syntax Error


    문법 오류

    pry debugger


    binding.pry

  • message_params
  • @message
  • next
  • exit
  • 좋은 웹페이지 즐겨찾기