카테고리 없음

[루비 온 레일] PermitsController # show의 ActiveRecord :: RecordNotFound, 'id'=로 허용을 찾을 수 없습니다.

필살기쓰세요 2021. 2. 9. 10:13

먼저 두 개의 쿼리를 호출하므로 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
        

따라서 허가를 설정하는 동안 idDB에 특정 허가가 없으면 예외가 발생합니다.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