문제

저는 첫 번째 Ruby on Rails 애플리케이션(그리고 먼저 xhtml과 CSS 이외의 애플리케이션)을 구축할 예정이며, 모델 구조에 대한 유용한 피드백을 찾고 있습니다.

애플리케이션을 시각화하는 데 도움이 되는 모형을 포함했습니다.

지금까지 내가 필요하다고 확신하는 유일한 모델은 다음과 같습니다.
1.ㅏ 영화 모델 (주 모델 역할을 하기 위해 movie라는 이름을 사용하므로 URL은 "sitename.com/movies/1-Willy-Wonka"와 같습니다.) 그리고
2.ㅏ 사용자 모델

그 외에는 무엇을 만들어야할지 모르겠습니다.'촬영지', '배우' 등이 있고, 가장 중요한 것은 '윌리 웡카', '조니 뎁'과 같은 속성입니다.

그 모델을 모두 만들어야 하나요? 심지어 속성까지 만들어야 하나요?그렇다면 사람들이 모델을 속성으로 생성하도록 하는 것이 가능하고 권장됩니까?

앱을 양식으로 생성되어 데이터베이스에 저장된 데이터로 보려고 하는데 그 관점으로는 속성(캐릭터 <=> 배우)을 내부 섹션(배우, 촬영 장소, 작품 등)에 어떻게 연결해야 할지 결정할 수 없습니다. 영화 목록;속성 자체가 관련 속성/영화/심지어 섹션에 대한 하이퍼링크가 되도록 허용합니다.'스티븐 스필버그'를 클릭하면 그가 출연한 영화, 그가 감독, 제작, 각본을 맡은 영화 등이 포함된 페이지로 이동합니다.

생각?

도움이 되었습니까?

해결책

먼저 데이터 모델을 명확하게 정리하는 것이 좋습니다.그런 다음 데이터베이스 테이블당 하나의 Rails 모델로 시작할 수 있습니다.항상 그런 것은 아니지만 시작하기에 합리적인 곳입니다.

영화와 배우에 중점을 두겠습니다.

몇 가지 가정:

  • 영화는 다른 엔터티와 다대다 관계를 가질 수 있습니다.
  • 배우와 영화 간의 관계의 일부로 캐릭터 정보를 저장하려고 합니다.

그러면 다음과 같이 관계를 모델링할 수 있습니다.

# movies.rb
class Movie < ActiveRecord::Base
  has_many :roles
  has_many :actors, :through => :roles
end

# actor.rb
class Actor < ActiveRecord::Base
  has_many :roles
  has_many :movies, :through => :roles
end

일반적으로, 직접 조인 모델을 만들지 않고도 Rails의 마법을 사용하여 조인 모델을 처리할 수 있습니다.이 경우 문자 정보를 조인 모델의 속성으로 저장하려고 하므로 명시적으로 생성합니다.

# role.rb
class Role < ActiveRecord::Base
  belongs_to :movie
  belongs_to :actor
end

다른 팁

모델 영화, 배우, 영화관 및 캐릭터로 시작하십시오. 영화와 배우는 다수의 관계를 가지고 있습니다 (영화에는 배우가 많고 배우가 많은 영화에서 일했습니다). Filelocation과 영화는 또한 다수입니다. 캐릭터 (Willy Wonka)와 배우도 다수입니다.

이것이 웹 개발까지 첫 번째라면 영화를 나열하고 추가, 편집 및 삭제할 수있는 간단한 웹 앱을 작성하는 것이 좋습니다. 제목, 시놉시스 및 영화 포스터/DVD 커버의 URL을 저장하십시오. 그런 다음 배우를 추가하고 영화와 연관시키는 작업을 수행하십시오.

"IMDB와 같은"사이트를 만드는 것은 사소한 프로젝트가 아닙니다. 배우를 영화와 연관시키는 것 외에도 복잡한 관계를 가질 것입니다. 배우들은 영화에서 역할을합니다. 그리고 당신은 그보다 훨씬 더 추상적 인 것을 원할 수도 있고, 사람이 감독, 제작자, 키 그립, 캐스팅 감독과 같은 것을 추적 할 수있는 영화에서 직업을 가지고 있다고 말하고 싶을 수도 있습니다.

데이터 모델에서 작업해야 할뿐만 아니라 사이트를 구성하려는 내용과 필요에 따라 해당 기능을 작성하고 최종 목표를 달성하기 위해 작은 단계를 수행 해야하는 순서에 대한 계획을 세우십시오.

더 자세한. 위에 나열된 모델의 마이그레이션은 다음과 같습니다.

class CreateMovies < ActiveRecord::Migration
  def self.up
    create_table 'movies' do |t|
      t.string  'title', :null => false
      t.timestamps
    end
  end

  def self.down
    drop_table 'movies' 
  end
end

class CreateActors < ActiveRecord::Migration
  def self.up
    create_table 'actors' do |t|
      t.string  'first_name', 'last_name', :null => false
      t.timestamps
    end
  end

  def self.down
    drop_table 'actors' 
  end
end

그만큼 movie_id 그리고 actor_id 아래 필드는 belongs_to 위의 역할 모델의 연관성은 역할 테이블이 배우와 영화에 합류 할 수있는 외국 키입니다. 모델링을 제안했듯이 character_name 이 관계의 속성이므로 역할의 속성입니다. 문자 _name에서 null을 허용하는지 여부는 전화입니다. 나는 Null의 Leery이지만,이 경우 나는 실제로 배우가 주어진 영화에 있지만 캐릭터에 대해 알거나 신경 쓰지 않는다는 사실을 실제로 저장하기를 원한다는 주장을 할 수있는 것으로 허용했습니다. 이름.

class CreateRoles < ActiveRecord::Migration
  def self.up
    create_table 'roles' do |t|
      t.integer 'movie_id', 'actor_id', :null => false
      t.string 'character_name'
      t.timestamps
    end
  end

  def self.down
    drop_table 'roles' 
  end
end

데이터베이스 정규화를 읽는 것이 가치가있을 수 있습니다. http://en.wikipedia.org/wiki/database_normalization

일반적으로 그렇습니다. 나는 내 모델이 가능한 한 세분화되는 것을 좋아합니다. 이를 통해 응용 프로그램에 익숙하지 않은 사람에게는 훨씬 더 명확 해지고 코드를 더 쉽게 재사용 할 수 있습니다.

확고한 이해가 도움이됩니다 Activerecord 협회 복잡한 신청서를 작성하기 전에. SQL 테이블 측면에서 모든 연관성과 실제로 생성하는 내용을 알고 있는지 확인하십시오. 때로는 마법처럼 보일 수 있으며 마법이 반드시 좋은 것은 아닙니다. 당신이 그 뒤에 무엇이 있는지 알고 있다면 물건이 제자리에 빠지게됩니다.

또한 실험하는 동안 모든 것을 긁어 내고 다시 시작하는 것을 두려워하지 마십시오. 그것은 루비이므로, 당신이있는 곳으로 돌아 오는 데 오래 걸리지 않을 것입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top