레일에 다소 새로운 내용으로 레일 설명서 또는 레일 가이드를 사용하여 실제 운이 없었던 질문에 대한 답을 얻으려고 시도하거나 레일 튜토리얼.레일 5 : 리팩터링 - 일대 다 관계 (테스트 및 뷰)
내 목표는 레일스가 일을 처리하는 방법을 포용하고 나중에 다른 개발자가 프로젝트에 쉽게 들어갈 수 있도록하는 것입니다.
질문 1 : 리팩토링 질문 리팩토링에
레일 연습. 이것이 모델이나 컨트롤러에 있어야하고 컨트롤러에서 어떤 아이템이 있어야하는지, 모델에서 무엇이 있어야 하는지를 정말로 알고 싶지는 않습니다.
첫 번째 반복은 :
<% @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 부서들 부서 = Department.where (: library_id => self.id) end''' –
@ DavidJ.Davis 업데이트 내 대답 – fbelanger