도서 추적 레일 앱

2834 단어 railsruby
이 앱은 다음에서 사용할 수 있습니다. https://shelvd-app.herokuapp.com/

Rails 애플리케이션의 경우 Goodreads 또는 The Storygraph와 같은 매우 간단한 버전의 책 추적 앱을 구축했습니다. 나는 읽는 것을 좋아해서 실제로 사용할 수 있는 것을 만들고 싶었습니다! 저는 최근에 Goodreads에 대해 잘 알고 있었기 때문에 책 추적 앱에 대한 가장 기본적인 요구 사항에 맞는 것을 만들고 싶었습니다.


내 Rails 애플리케이션은 확실히 지금까지 가장 어려운 프로젝트였지만 이 과정에서 가장 많은 것을 배웠습니다. 새로운 하드 프로그래밍 기술을 제외하고 내가 이것에서 빼앗았다고 생각하는 가장 큰 것은 프로젝트 준비의 중요성입니다. 지난 두 프로젝트의 경우 일주일 간의 프로젝트 주간 뒤에 일주일의 버퍼가 있었습니다. 이 두 프로젝트 모두에서 나는 응용 프로그램을 확장하고, 변경하고, 반복하면서 그 여분의 주를 끝까지 채웠습니다. 이번에는 가장 필수적인 리팩토링 외에는 반복하거나 변경할 시간이 없었습니다. 나는 이 프로젝트에서 일할 시간이 일주일 줄어드는 것이 경험에 어떤 영향을 미칠지 충분히 생각하지 않았기 때문에 CLI 및 Sinatra 프로젝트에 대해 계획한 만큼 계획했습니다(적어도 충분하지 않았습니다). 그렇게 좁은 범위로 무언가를 구축하기 위해). 이 경험을 하는 동안 빡빡한 일정을 맡게 되었을 때 구조의 중요성과 잘 생각한 계획을 확실히 이해하게 되었습니다.

어쨌든 앱으로 들어가 봅시다!

내 애플리케이션에는 8개의 주요 모델이 있습니다(그 중 2개는 다른 기능이 없는 순전히 조인 테이블임).
  • 저자
  • 책 저자
  • 책꽂이
  • 포스트
  • 독서실
  • 선반
  • 사용자

  • 책 정보 수집을 위해 GoogleBooks gem 을 사용했습니다. Google Books API를 사용하기 쉬운 gem으로 패키징합니다.

    사용자와 서가 사이의 상호 작용은 매우 간단합니다. 서가는 사용자가 책을 추적하기 위해 만들 수 있는 목록입니다. 책에는 저자, 설명 및 평균 등급 정보가 첨부되어 있습니다. 앞으로는 내 앱 내 사용자가 읽은 책에 평점/리뷰를 추가할 수 있도록 애플리케이션을 확장하고 싶습니다.

    내 응용 프로그램의 다른 측면은 ReadingRoom 모델입니다. Friend-to-Friend 구조를 구체화할 시간이 충분하지 않았지만(나중에 이것을 추가하고 싶습니다) 여전히 응용 프로그램에 약간의 사회적 측면을 포함하고 싶었습니다. 열람실은 사용자가 주제에 대한 방을 만들고 다른 사용자와 채팅할 수 있는 미니 포럼 방과 같습니다.

    약간의 코드를 공유하기 위해 범위 메서드와 GoogleBooks API gem을 사용하는 내 책 모델의 모양을 공유하겠습니다.

        has_many :books_shelves 
        has_many :shelves, through: :books_shelves 
        has_many :users, through: :shelves
        has_many :books_authors
        has_many :authors, through: :books_authors
    
        scope :highest_rated, -> {where('average_rating >= ?', 4).sort}
    
        validates :title, presence: true 
        validates :isbn, presence: :true 
        validates :isbn, uniqueness: true 
    
    
        def most_pop
            average_rating.to_i * ratings_count.to_i
        end
    
        def self.highest_rated_sorted
            highest_rated.sort_by {|book| book.most_pop }
        end
    
        def self.search(search)
            book = GoogleBooks.search("#{search}", {count: 3 })
        end 
    


    내 컨트롤러 전체에서 GoogleBooks.search 메서드를 사용하는 대신 내가 원하는 책의 양을 정확히 반환하는 나만의 클래스 메서드로 마무리하기로 결정했습니다. 또한 몇 가지 다른 클래스 메서드와 인스턴스 메서드를 사용하여 등급과 리뷰어 수에 따라 책을 정렬했습니다.

    전반적으로 저는 이 프로젝트가 엄청난 배움의 여정이었기 때문에 계속 작업하게 되어 기쁩니다. 리팩토링하고 날씬해지고 싶은 부분이 너무 많아서 앞으로도 이 앱을 계속 개발할 수 있기를 기대합니다!

    좋은 웹페이지 즐겨찾기