2014-09-22 82 views
-1

我是軌道開發人員的新人。請幫助我理解。 我有3個表: 電話,問題,結果鋼軌關係。 Rails 4

電話是: ID,姓名,日期

問題是: ID,質疑

結果是: ID,CALL_ID ,question_id,結果

我讀過Rails手冊,據我瞭解,我創建了3個模型。

在我的模型Call.rb 我做下一關係:

has_many :results 
has_many :question, through: :results 

我Result.rb

belongs_to :call 
belongs_to :question 

我Question.rb

has_many :result 

因此,有可以是表中的許多記錄「結果」,其中一個call_id,這是可以通過結果

有問題,一個關係。如果如果試圖這樣的啓動代碼:

@calls = Call.all 

比對我的看法:

<% @calls.each do |call| %> 
<%= call.result.result %> 
<% end %> 

我錯誤,「結果是未定義的方法」。但它必須是一個財產。

我做錯了什麼? 謝謝!

+0

你剛試過'<%= call.result%>'? – 2014-09-22 19:53:28

+0

但我在表格問題中沒有字段** call_id **。 因此,對於我has_many:問題 - 這也是錯的 – 2014-09-22 20:00:31

+0

如果我做了<%= call.result%> - 我錯誤: 未定義的方法'結果' – 2014-09-22 20:02:08

回答

1

根據您的模式,你的協會應該像這樣

class Call < ActiveRecord::Base 
    has_many :questions 
    has_many :results 
end 

class Question < ActiveRecord::Base 
    belongs_to :call 
end 

class Result < ActiveRecord::Base 
    belongs_to :call 
end 

所以在視圖中,

<% @calls.each do |call| %> 
    <% call.results.each do |result| %> 
    <%= result.result%> 
    <% end %> 
<% end %> 
+0

所以我需要做2個週期,這是解決方案。謝謝! – 2014-09-22 22:04:15

0

我注意到的第一件事是,你的電話應該有很多問題,很多結果通過問題。這是因爲電話會有自己的問題,而這些問題本身也會產生結果。

class Call < ActiveRecord::Base 
    has_many :questions 
    has_many :results, through: :questions 
end 

您在Result類中不需要call_id。但是,如果你想保留在那裏,你不需要通過你的通話類中的問題(因爲它們之間有直接的關係)

在你的問題類中,我認爲它是一個錯字,但它應該是複數

has_many :results 

說了這麼多,你的循環通過電話將給出帶來的結果(複數),而不是結果(單數),一個電話可能有許多成果。因此:

<% @calls.each do |call| %> 
    <% call.results.each do |result| %> 
    <%= call.result %> 
    <% end %> 
<% end %> 
+0

nope,通過結果呼叫有很多問題.. – 2014-09-22 20:06:45

+0

對不起,我的pdated我的帖子,因爲這是錯誤的架構描述 – 2014-09-22 20:08:02

+0

請看,新的架構描述 – 2014-09-22 20:09:49

1

有幾件事。

首先,您需要修復您的關聯,使複數和單數時態匹配。 Marcelo指出,has_many :result不起作用。

其次,您需要確保您的表實際上具有正確的ID以使關聯正常工作。使用導軌控制檯檢查Result。從您的問題信息中,它應該具有call_idquestion_id的屬性。一旦你確認了這一點,在控制檯中創建一些對象並測試你的關聯。

@call = Call.create(name: "test", date: Time.now) 

@result = Result.create(call_id: @call.id, result: "some result") 

然後

@call.result # should yield the Result record you just created 

最後,你需要重命名result屬性爲Result。這是超級混亂,只會導致問題。

+0

可以解釋我請不同複數和單數? – 2014-09-22 21:45:15

+0

'has_many'意味着複數(即多於一個)。所以如果你打算使用'has_many',它需要使用':results'(複數)而不是'result'(單數)。 – settheline 2014-09-22 21:50:54

+0

啊這很簡單,謝謝。現在我嘗試修復並嘗試您的解決方案! – 2014-09-22 21:59:30