[루비 온 레일] PermitsController # show의 ActiveRecord :: RecordNotFound, 'id'=로 허용을 찾을 수 없습니다.
먼저 두 개의 쿼리를 호출하므로 before_action에서 : show 메소드를 제거 할 수 있습니다.
그런 다음 활성 레코드 쿼리 (아래와 같이)에 where 조건을 추가하면 단일 레코드 대신 레코드 배열이 생성됩니다.
@permits = Permit.where(:user_id => current_user.id)
따라서 객체 배열이 name 매개 변수에 직접 액세스하는 것을 허용하지 않으므로 뷰에 아래 줄을 직접 넣을 수 없습니다.
<%= @permits.name %>
아래와 같이 모든 레코드를 반복하고 모든 Permit 개체의 이름을 채울 수 있습니다.
<% @permits.each do |permit| %>
<%= permit.name %>
<% end %>
또는 아래와 같이 쉼표로 구분하여 표시 할 수 있습니다.
<%= @permits.map { |f| f.name }.join ',' %>
@permits에서 첫 번째 개체 만 원하면 아래와 같이 사용할 수 있습니다.
<%= @permits[0].name %>
추신 : 첫 번째 개체가 존재하지 않으면 예외가 발생합니다.
-------------------에서 PermitsController
당신은 허가를 설정하기 전에 조치를 썼다있다
before_action :set_permit, only: [:show, :destroy]
def set_permit
@permits = Permit.find(params[:id])
end
따라서 허가를 설정하는 동안 id
DB에 특정 허가가 없으면 예외가 발생합니다.ActiveRecord::RecordNotFound
당신은 또한 쇼 액션에서 허가를 설정하고 있습니다
def show
@permits = Permit.where(:user_id => current_user.id)
end
쇼 액션에 대해 두 번 허용을 설정하는 이유가 확실하지 않습니다. -첫 번째 set_permit
방법-두 번째 show
방법
요청과 함께 전달되는 문제의 매개 변수를 추가해 주시겠습니까?
레코드를 두 번 할당하는 것은 좋은 습관이 아닙니다. 이전 작업에서 귀하의 경우에는 당신이 찾는 Permit
의해 id
그 특정에 대한 기록이 경우 id
데이터베이스에 존재하지 않는 다음은 올릴 것이다 ActiveRecord::RecordNotFound
예외. 그래서 당신은 당신이 전달하는 것을 확인해야합니다 params[:id]
.
현재 사용자를 기반으로 허용을 설정하려면 set_permit
쇼 동작을 건너 뛸 수 있습니다 .
그리고 뷰에서 그 케이스 activerecord collection
대신 할당하는 경우 쇼 액션 active record
에서 permit
세부 사항 을 인쇄하려면 컬렉션 객체를 반복해야합니다 . 또는 사용자에 대한 허용이 하나만있는 경우 active record
대신 show action에서 개체를 설정할 수 있습니다.active record collection
출처
https://stackoverflow.com/questions/39930010