2017-02-23 138 views
1

我在嘗試訪問Ruby on Rails中某個對象的單個實例時出錯。
我認爲你應該在看我的代碼時明白我的觀點。Ruby on Rails - 鏈接兩個模型

我得到了我的測試模型行

has_many :test_boards 

,並在test_board - 型號我

belongs_to :test 

現在我有一個被通過渲染的部分稱爲_details.html.erb show.html.erb幷包含以下行:

<% @test_board = @test.test_board %> 

嘗試在我的應用程序中加載網站離子現在用消息未能在試驗

NoMethodError#表明
顯示C:/ ****/****/**** /應用/視圖/測試/ _details.html.erb其中線#270提出:

未定義的方法`test_board」爲#<測試:0x769ccc8>
跟蹤模板包含的:應用程序/視圖/ p_and_i /測試/ show.html.erb

我希望,自從你從事研究bug的日子以來,有人可以幫助我。如果你需要更多的細節,我會添加它們,當然。
謝謝! :)

回答

3

它應該是#<測試

<% @test_board = @test.test_boards %> 

未定義的方法`test_board」:0x769ccc8>

你有:has_many協會與TestBoard因此該方法軌生成你獲取所有相關記錄是test_boards

+0

謝謝。 這樣做,我得到了另一個問題: 在我的test_boards/show.html.erb我有類似於<%= test_board.title%>。由於我的@test_board變量現在包含多個test_board,因此失敗。 你也有這個解決方案嗎?我認爲,它必須像數組訪問一樣,但是Ruby可以解決這個問題。 –

+0

是的,你必須通過'@ test_board.each do | test_board |' –

+0

來循環'@ test_board',並且爲了可重用性,你應該將變量名稱改爲'@ test_boards' –

2

由於定義的關係是一對多,這意味着單個測試可以有多個test_boards

所以,你應該,如果你嘗試調用@ test.test_board它需要它作爲一個一對一使用@ test.test_boards代替@ test.test_board

關係即測試有一個測試板

如需進一步瞭解,請

http://guides.rubyonrails.org/association_basics.html

1

測試的has_many test_boards

經過導軌導向

所以,你必須寫:

@test_board = @test.test_boards 
0

該協會表示test有許多test_boards。所以你可以參照test_boards,也就是複數。

這樣你就可以實現上述與

<% @test_board = @test.test_boards %> 

雖然這個工作,還有你應該遵循一些好的做法。

  • 由於@test.test_boards會給集合的變量名稱也應該是複數。因此,您可以使用@test_boards = @test.test_boards而不是
  • 此外,您應該在控制器操作中定義實例變量。所以你可以將這個@test_boards = @test.test_boards移動到你的TestsController。