Rails로 캘린더를 간단하게 처리할 수 있는 단순함.달력 달력에 창 만들기

개시하다


나는 Rails에서 달력simple_calendar을 간단하게 처리할 수 있는gem의 존재를 알았다.
따라서 매주 표시되는 달력에 각자 날짜에 예정된 양식을 넣으면 어떤 느낌을 받을지 샘플을 만들면서 검증했다.
읽는 데 편리하도록 햄을 도입하여view를 시도하고 싶습니다.

환경의 전제 조건

  • Rails 5.1.6
  • ruby 2.4.3
  • 목표


    매주 표시되는 달력을 만드는 것을 목표로 매일 입력 형식이 있습니다.

    절차.


    1. 초기 설정


    새 rails 프로그램


    다음 명령을 실행합니다.
    $ rails new calendar-sample
    $ cd calendar-sample
    

    Gem 설치


    이번에 사용한 simple_calendar,haml-rails를 설치합니다.
    Gemfile
    # 追記
    gem 'simple_calendar', '~> 2.0'
    gem 'haml-rails'
    
    $ bundle
    

    simple_calendar 보기 템플릿 만들기


    그다음에 단순.calendar의 디자인을 수정하기 위해 템플릿을 생성합니다.
    $ rails g simple_calendar:views
    

    haml로 변환


    haml-rails 명령을 사용하여 haml로 변환합니다.
    $ rake haml:erb2haml
    

    샘플 모델 만들기


    scaffold를 사용하여 디스플레이를 확인하는 미팅 모델을 만듭니다.
    $ rails g scaffold Meeting name start_time:date content:string
    

    simple_캘린더 디스플레이 설정


    달력을 주 단위로 표시할 수 있도록 단순callendar를 설정합니다.
    app/views/meetings/index.html.haml
    -# 追記
    = week_calendar do |date| 
      = date
    

    보기


    서버를 시작합니다.
    $ rails db:migrate
    $ rails s
    
    방문http://localhost:3000/meetings하여 주간 달력이 표시되는지 확인합니다.

    2. 달력의 양식 제작


    로그인


    routes에서 데이터를 통일적으로 등록하는 방법을 정의합니다.
    config/routes.rb
    Rails.application.routes.draw do
      resources :meetings do
        collection do
          post :update_week
        end
      end
    end
    

    view 설치


    매일 콘텐츠를 입력할 수 있는 창을 실현합니다.
    app/views/meetings/index.html.haml
    -# 以下に書き換え
    %h1 Week Meetings
    
    = form_for :meeting, url: update_week_meetings_path, html: { method: :post } do
      = week_calendar do |date|
        = date
        - meeting = @meetings.find_or_initialize_by(start_time: date)
        - if meeting.id.nil?
          %p
            = hidden_field_tag "meeting[#{date}][start_time]", date
          %p
            = text_field_tag "meeting[#{date}][content]"
        - else
          = fields_for "meeting[]", meeting do |meeting_fields|
            %p
              = meeting_fields.hidden_field :start_time
            %p
              = meeting_fields.text_field :content
      = submit_tag
    
    방법find_or_initialize_by으로 새로운 기록과 편집을 지원할 수 있습니다.
    이 밖에 처리는 유무meeting.id로 나뉘는데 이것은 조회 매개 변수의 형식을 통일시키기 위한 것이다.
    기존 데이터는 id를 키로 산열에 저장되고, 새로운 데이터는 id가 없기 때문에 산열로 저장됩니다.
    id가 있는 경우
     "meeting"=>
      {"1"=>{"start_time"=>"2018-07-02", "content"=>"A"},
       "2"=>{"start_time"=>"2018-07-03", "content"=>"B"}}
    
    id가 없는 경우
     "meeting"=>
      [{"start_time"=>"2018-07-02", "content"=>""},
       {"start_time"=>"2018-07-03", "content"=>""}]
    
    따라서 POST에 배열의 질의 매개 변수를 포함하려면 다음과 같은 오류가 발생하므로 해싱을 함께 사용할 수 있습니다.
    Rack::QueryParser::ParameterTypeError (expected Hash (got Array) for param `meeting'):
    

    참조 링크

  • Rails에서 동일한Form으로 동일 모델 수정 및 등록
  • controller 설정


    view를 통해 입력한 여러 날의 데이터를 통일적으로 등록하고 업데이트하는 방법입니다.
    app/controllers/meetings_controller.rb
      # 追記
      def update_week
        week_meetings_params.keys.each do |key|
          @meeting = Meeting.find_or_initialize_by(start_time: week_meetings_params[key][:start_time].to_date)
          @meeting.update_attributes(week_meetings_params[key])
        end
        redirect_to meetings_path
      end
    
      # 中略...
    
      private
        # 追記
        def week_meetings_params
          params.require(:meeting).permit!
        end
    
    방문http://localhost:3000/meetings하여 매주 폼을 업데이트할 수 있는지 확인합니다.

    끝맺다


    갑작스럽게 제작된 샘플이라 거친 부분이 있을 수 있지만 단순캘린더를 사용하여 주 디스플레이 형식을 테스트할 수 있습니다.나는 달력 부분을 간단하게 처리하는 것이 매우 편리하다고 생각한다.

    참조 링크

  • GitHub - excid3/simple_calendar: A wonderfully simple calendar gem for Rails
  • GitHub - indirect/haml-rails: let your Gemfile do the talking
  • Rails로 여러 줄 링크 통합 업데이트
  • Rails의 ActiveRecord에서createor_업데이트를 무분별하게 하는 스마트 방법
  • 좋은 웹페이지 즐겨찾기