對Rails有點新鮮感,並試圖找出一些問題的答案我一直沒有真正的運氣使用Rails文檔或導軌指南,或鐵軌教程。Rails 5:重構 - 一對多關係(測試和視圖)
我的目標是擁抱rails如何處理事情,並嘗試讓其他開發人員稍後再進入該項目。
問題1:重構問題在重構
Rails的做法。我不確定這是否應該在模型或控制器中進行,並且真的只是想知道控制器中的哪些項目應與模型中的內容相匹配。
第一次迭代:
<% @departments.each do |department| %>
<tr>
<td><%= department.name %></td>
<td><%= department.description %></td>
<td>
<%= library = Library.find_by(id: department.library_id).name %>
</td>
<td><%= link_to 'Show', department %></td>
<td><%= link_to 'Edit', edit_department_path(department) %></td>
<td><%= link_to 'Destroy', department, method: :delete, data: { confirm: 'Are you sure?' } %></td>
</tr>
<% end %>
這似乎我錯了,並似乎應該取出一部分作爲後端邏輯。
第二次迭代:
型號
class Department < ApplicationRecord
belongs_to :library
def get_library_name(lib_id)
library = Library.find_by(id: lib_id)
return library.name
end
end
查看
<% @departments.each do |department| %>
<tr>
<td><%= department.name %></td>
<td><%= department.description %></td>
<td>
<%= department.get_library_name(department.library_id) %>
</td>
<td><%= link_to 'Show', department %></td>
<td><%= link_to 'Edit', edit_department_path(department) %></td>
<td><%= link_to 'Destroy', department, method: :delete, data: { confirm: 'Are you sure?' } %></td>
</tr>
<% end %>
這種感覺更正確,但不是所有的方式出現,所以我真的不知道我該怎麼改它更加正確,特別是因爲列出記錄的索引視圖非常相似。
我應該如何重構這個?
問題2:我未通過檢測
無論哪種方式,我的測試不及格。我猜這是我使用我的一對多關係的方式。
test "should get index" do
get departments_url
assert_response :success
end
錯誤:
DepartmentsControllerTest#test_should_get_index:
ActionView::Template::Error: undefined method `name' for nil:NilClass
app/models/department.rb:6:in `get_library_name'
app/views/admin/departments/index.html.erb:21:in `block in _app_views_admin_departments_index_html_erb__1894713831414342893_57284960'
app/views/admin/departments/index.html.erb:16:in `_app_views_admin_departments_index_html_erb__1894713831414342893_57284960'
test/controllers/departments_controller_test.rb:11:in `block in <class:DepartmentsControllerTest>'
這工作完美和一個很好的解釋。我要標記你的答案是否正確,但是如果我想讓所有部門都列在我的圖書館視圖中,你能解釋一下嗎?當檢查指向Library.all的@libraries項目時,我沒有看到任何部門。 –
我實際上在我的庫中創建了一個用於獲取部門的類。 '''def departments departments = Department.where(:library_id => self.id) end''' –
@ DavidJ.Davis更新我的回答 – fbelanger