2012-11-04 2 views
1

저는 Rails에 익숙하며 Rails 3.2를 사용하여 해결하고자하는 문제에 관해 질문하고 있습니다.Rails 3.2의 'post_id'열과 사용자/게시물/주석 간의 관계가 없습니다.

https://gist.github.com/0fe5cf9093b21f4f632f

내가 코드가 정말 나쁜 경우/난으로 존재하지 않아도 몇 가지를 추가 사과 : 여기가 내 문제를 가정 문제의 몇 개의 파일에 대한 링크가 거짓말이다 내가 따라갈 때 모든 일의 방식에 익숙해 지려고 노력하고있어.

내 웹 사이트에서 작성된 각 게시물에 대한 의견을 갖고 싶습니다. 사용자가 가지고있는 논리는 사용자가 많은 의견을 갖고 있으며 사용자가 여러 의견을 가지고 있다고 생각합니다. 나는 그 관계를 추가했다 (비록 특별히 아무것도하지 않는 것 같지만), 나는 내 테이블 참조가 모두 정확하다고 생각한다. (비록 내가 고안을 사용하면서 사용자에게 아무 것도 추가하지 않았지만 게시물이 별도의 개체 자체이므로 아무 것도 추가 할 필요가 없다고 생각했습니다.)

현재로서는 작성하고 저장할 수 있으므로 일반적으로 모든 의견을 표시 할 수 있습니다. 최소한 user_id 변수도 저장 했으므로 어떤 계정에서 코멘트를 작성하는지 이해할 수 있습니다. 나는 어디에서/언제 내가 post_id에 있어야하는지에 관해 명확히 알지 않고있다. 그래서 그것은 가장 큰 이슈 다. 어떤 방법 나는 posts_controller (포스트 페이지가로드 될 때 이론적으로 내가 그 속성을 편집 할 수 있어야하기 때문에), 나는 내려면

undefined method 'post_id' 

또는

no post_id column 

에서 그것을 시도했다 오류, 그것이 존재하지 않는다는 것을 나타냅니다, 비록 내가 이해하는 한, 나는 그것을 정의했습니다. 앞에서 언급했듯이 user_id이 저장 될 수 있다는 사실은 저를 더 혼란스럽게합니다. 내 쇼보기에서 만든 주석에 대한 속성을 표시하는 경우

, 나는 다음과 같은 얻을 :

{ 
    "id"=>1, 
    "content"=>"text here", 
    "posted"=>Sat, 03 Nov 2012 20:36:53 UTC +00:00, 
    "user_id"=>1, 
    "created_at"=>Sat, 03 Nov 2012 20:36:53 UTC +00:00, 
    "updated_at"=>Sat, 03 Nov >2012 20:36:53 UTC +00:00 
} 

post_id 없다, 나는 의견 마이그레이션 테이블에 추가 했더라도. 게시물 컨트롤러에서 @post.id을 전달하려는 경우 (게시물 아래에 표시 메소드가 주석 인스턴스에 표시됨) 질량 지정 오류가 발생합니다. :class:foreign_key 옵션을 뒤범벅하는 것은 그리 많은 일이 아닙니다. 내가 레일스의 문서를 포함하고있는 연구를 토대로, 나는 관계를 통해 has_many이 필요하다고 생각하지 않지만, 정보를 적절하게 저장해야하는 부분이 어디 있는지 놓치고 있습니다.

아마 이것은 도움이되었지만 아마도 데이터베이스/모델 관계 디자인에 대한 필자의 이해 부족 때문일 수 있습니다. 몇 가지 비슷한 질문을 보았지만 여전히 자신의 문제에 대한 솔루션을 적용하기가 어렵습니다.

답변

1

게시물을 기반으로하면 테이블을 만든 후 이전에 post_id를 추가 한 것 같습니다. 이것이 사실이라면 마이그레이션 파일을 수정하는 것은 나쁜 습관임을 이해하십시오. 대신, 데이터베이스의 상태를 "수정"할 새로운 마이그레이션을 작성해야합니다.

관계 및 게시물이 올바르게 설정되어있는 것 같습니다. "belongs_to"가있는 모델에는 외래 키가 있습니다. 그와 같이, 나는 코멘트가 "post_id"를 가질 것으로 기대한다.당신의 이미 실행 코멘트 마이그레이션 파일에 post_id를 "또한

  • 만들기 새로운 마이그레이션"

    1. 을 제거 당신을 위해 다음과 같은 작품이 경우

      참조하십시오 ". 생성에서 rails g migration addPostIdToComments

    2. add_column :comments, :post_id, :integer
    3. 당신의 마이그레이션을 실행합니다 : 마이그레이션는 "변화"방법이 입력
    ,369 "레이크 DB 마이그레이션"

    코멘트 테이블에 post_id 열을 추가해야합니다. rake db:drop db:create db:migrate

    을 : 당신이 바인드 얻을 완전히 데이터베이스를 파괴하고 처음부터 다시 작성하려면

    , 당신은 실행할 수 있습니다 (완전히 데이터베이스 떨어질 것이다이 유의하십시오) (이 샘플 응용 프로그램 모양)

    대량 할당 문제는 데이터베이스에서 업데이트 할 수있는 모든 모델 속성 (열)을 허용 목록에 포함해야하는 레일의 새로운 보안 옵션과 관련 될 수 있습니다. 허용 목록 속성에 대한 내용은 attr_accessible 문서를 참조하십시오. http://api.rubyonrails.org/classes/ActiveModel/MassAssignmentSecurity/ClassMethods.html

    rails에 오신 것을 환영합니다. 희망이 도움이!

  • +0

    나는 바보와 데이터베이스 닦기 (나는 무대에 서 있다고 생각한다.)라고 생각하면 post_id가 나타나는 문제가 해결되었다. 내 문제는 지금 어디에서 필연적으로 현재 게시물의 ID에 대해 post_id 값을 설정해야할지 모르겠다는 것입니다. 간단히 "@ comment.post_id = @ post.id"를 사용하면 트릭을 수행하지 않는 것처럼 보입니다. 허용 목록 허용 목록을 사용하여 간단히 해결해야 할 수도 있지만 더 나은 해결책이 있어야한다고 생각합니다. – Paul

    +0

    명백하게 간단하게 : comment.rb의 post_id attr_accessible이 문제를 수정했습니다. 쇼 모델에서 "<% = f.hidden_field : post_id, : value => params [: id] %>"를 추가해야합니다. 아마도 가장 좋은 해결책은 아니지만, 적어도 지금까지는 밖으로 더 나은 무언가. – Paul

    관련 문제