2013-02-12 2 views
0

이 문제에 대한 많은 검색을 수행하고 튜토리얼 (예 : railscast : 중첩 된 모델 양식)을 보았지만 내 문제에 대한 올바른 해결책이 아닌 것 같습니다.양식을 중첩하지 않고 모델을 연결하는 방법은 무엇입니까?

이론에 대한 데이터를 수집하고 싶습니다. 이 이론은 독특한 카드에 대한 답을 얻기 위해 많은 의문점이 있습니다. 항상 모든 질문을 모든 카드에 표시하고 싶지만 답변은 각 카드에 따라 다를 수 있습니다. 그러므로 나는 question_id와 card_id를 잡아야합니다. 그러나 깊이 중첩하고 id를 params로 잡는 것은 상당히 어려울 것입니다. 누구든지 내 문제에 대한 더 나은 솔루션을 알고 있습니까?

theory.rb

class Theory < ActiveRecord::Base 

has_many :cards 
has_many :questions 

card.rb

class Card < ActiveRecord::Base 

belongs_to :theory 
has_many :answers 
has_many :questions (Do I need this here - I always want to display all questions?) 

question.rb

: 여기

내 모델입니다
class Question < ActiveRecord::Base 

belongs_to :theory 
has_many :answers 

answer.rb는

class Answer < ActiveRecord::Base belongs_to :card belongs_to :question 

도와 주셔서 많이 감사합니다!

답변

0

모델 간의 관계는 화면에 표시되는 방식에 따라 결정되어서는 안됩니다. 그들은 실제로 어떻게 서로 관련이 있는지에 따라 결정되어야합니다.

나는 완전히 그래서 관계가 존재할 필요가 무엇을 말할 수 없다 대표로되어있는 것을 이론/카드 이해하지 않는다, 그러나 나는이에 자상을 가질 수 있습니다

그것은 나를 보인다 카드는 특정한 이론과 관련된 한 사람의 답을 나타낼지라도? 그렇다면 카드에는 답변 만 있기 때문에 "has_many : questions"가 필요하지 않습니다. 또한 각 답변은 질문에 연결되므로 답변을 통해 질문에 "접근"할 수 있습니다. 카드에 대한 질문 목록을 원한다면 카드 모델에 "has_many : questions, : through => : answers"를 추가 할 수 있습니다.

답변을하기 전에 각 카드에 다른 일련의 질문을 추가 할 수 있으면 "has_many : questions"가 필요하지만 모든 질문이 각 카드에 있으면 필요하지 않습니다. . 아래에 귀하의 의견에 응답

업데이트 :보기에 그런

@card = Card.find 2 
@theory = Theory.find 1 

@theory.questions.each do |question| 
    @card.answers.build :question=>question 
end 

(같은 것을 할 :

한 가지 방법은 컨트롤러를 구축하여 카드에 대한 답을 추가하는 것입니다 이 HAML)입니다 :이 중첩 된 형태의 속성을 사용

= form_for @card do |f| 
    [email protected] do |answer| 
    =f.fields_for answer do |answer_form| 
     =answer_form.hidden_field :question_id 
     %p=answer.question.full_question 
     %p=answer_form.text_field :input 

, 그래서 당신의 카드 모델과 함께 작동하도록하기 위해 당신은이를 추가해야합니다 :

class Card < ActiveRecord::Base 
    .. 
    accepts_nested_attributes_for :answers 
    .. 
end 
+0

지금까지 도와 주셔서 감사합니다. –

+0

나는 그것이 복잡하게 들리는 것을 안다. 그러나 내가 원하는 것은 카드 다. 그것은 모두 같은 질문이지만 다른 대답을 보여준다. (예 : 이론은 권리 철학이며 모든 카드는 철학자를 나타내고 그의 개인은 같은 질문에 대한 답을 나타냅니다.) 따라서 질문은 카드를 통해 많은 답을 얻을 수 있습니다. 하지만 이제 실질적으로 어떻게 question_id를 내 양식에 포함시킬 수 있습니까? 질문 입력란을 답변 입력란과 어떻게 연결할 수 있습니까? –

관련 문제