문제

안녕하세요. 저는 코딩을 처음 접한다는 말로 이 글을 시작하고 싶습니다.

두 가지 방법으로 해결될 수 있는 문제가 있습니다.

ㅏ.부분 렌더링을 통해

비.컨트롤러를 업데이트하여

(내가 완전히 틀릴 수도 있지만 이것이 내가 의심하는 것입니다 ㅋㅋㅋ)

두 개의 컨트롤러/뷰 "리뷰"와 "로그"가 있습니다.그리고 둘 다 같은 페이지에 나타나기를 원합니다.

어떻게 해야 하나요?부분 렌더링을 시도했지만 항상 오류가 발생합니다.

그리고 아래 코드를 시도해 보았습니다.

내 리뷰가 페이지에 표시되었지만 추가하면

@log = @user.logs.all 

하지만 리뷰처럼 모든 로그를 페이지로 가져오지는 않습니다.

def show
  @user = User.find_by_name(params[:id])
  if @user 
    @reviews = @user.reviews.all
    render action: :show
  else
    render file: 'public/404', status: 404, formats: [html]
  end
end
도움이 되었습니까?

해결책

먼저 첫 번째 것들.뷰는 컨트롤러의 작업을 나타냅니다.따라서 각 컨트롤러에 대해 여러 개의 뷰가 있을 수도 있고 전혀 없을 수도 있습니다.

그래서 렌더링을 하고 싶다면 @reviews 그리고 @logs 동일한 페이지에서 먼저 동일한 작업에서 두 ​​인스턴스 변수를 모두 인스턴스화한 다음 동일한 작업에서 두 ​​부분을 모두 렌더링해야 합니다.어떻게 합니까?쉬운.먼저 방금 보여준 컨트롤러로 이동하여 편집합니다. show 행동.

def show       
  # You can set the variable in the if-clause 
  # And you also need to use static finders with a hash as an argument in Rails4
  if (@user = User.find_by(name: params[:id]))
     @reviews = @user.reviews.all 
     @logs = @user.logs.all
  # You don't need to call render explicitly 
  # if you render the view with the same name as the action 
   else
     render file: 'public/404', status: 404, formats: [html]
   end     
end

두번째:너는 네 집으로 가 /app/views/reviews/show.html.erb 템플릿을 만들고 두 부분을 모두 이렇게 배치합니다(이것은 단지 예일 뿐이므로 필요에 맞게 마크업을 조정하세요).

<h1> Reviews and Logs</h1>
<div id="reviews_part">
 <%= render @reviews %>
</div>
<div id="logs_part">
  <%= render @logs %>
</div>

이제 2개의 새로운 부분을 만듭니다. /app/views/reviews/_review.html.erb 그리고 /app/views/logs/_log.html.erb 그리고 거기에 필요한 모든 마크업을 넣습니다(일반 변수 사용). review 그리고 log 반복되는 객체를 처리하기 위해).Rails는 필요한 만큼 자동으로 해당 부분을 반복합니다.

또는 부분 렌더링을 명시적으로 호출할 수 있습니다.

<div id="reviews_part">
  <% @reviews.each do |review| %>
   <%= render review %> 
        which is the same as
   <%= render partial:"reviews/review", locals:{review:review} %>
  <% end %>
</div>

다른 팁

HAML에서 부분을 뷰로 렌더링하는 방법은 다음과 같습니다.

=render :partial => "header"
%h2 Hello World
=render :partial => "footer"

이런 방식으로 렌더링하는 모든 부분은 동일한 폴더 내에 생성되어야 합니다.각 부분의 이름은 밑줄(_).이는 뷰의 디렉터리여야 합니다.

- home
    - index.html.haml
    - _header.html.haml
    - _footer.html.haml
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top