블로그 글의 작성자 목록 페이지 만들기

4884 단어 RubyRails

이루고 싶은 일.


블로그 응용 프로그램의 index 페이지에 모든 사용자의 투고를 표시하고, 각 투고의 '이 사용자의 투고 일람표' 를 누르면 해당 사용자의 글만 표시하는 페이지로 이동하려고 합니다

실현을 위한 일


①routes.rb 파일에 원본 동작을 추가하고 Resources에서 만든 동작에 추가합니다
→ 이후에 다시 살펴보면 무엇을 하고 싶은지 모르겠지만 그때 이렇게 동작을 추가하면 매개 변수user로 사용할 수 있다아이디가 일어날 줄 알았어요.
routes.rb
  get '/user/user_id', to: 'blogs#user'
②blogs_controller.rb 파일에 다음 내용을 추가합니다.where 방법으로userid를 지정하는 중입니다.
blogs_controller.rb
  def index_user
    @blogs = Blog.where(user_id:params[:user_id])
  end
③ 콘솔을 사용한다.rails routes를 통해Prefix를 확인하고 모든 사용자의 발언 일람 링크 설정
index.html.erb
<%= link_to 'このユーザーの投稿一覧へ', index_user_blog_path(blog.user_id) %>

발생한 오류


구체적인 오류는 발생하지 않았지만, 클릭 후 이동하는 앞 페이지에는 아무것도 표시되지 않았다.실질적인 착오.

확인한 일


③클릭 시 콘솔 내용을 확인한다.

"user id"IS NULL!즉 사용자id는 어떤 이유로 파라미터를 보내지 않았습니다. (예를 들어 Parameters: {"id"= > 5 "} 같은 것)컨트롤러를 꼼꼼히 검사해도 파라미터가 보낸 흔적이 없다.
②를 체크해 보았지만 where 사용법 등은 문제가 없는 것 같습니다.
마지막 검사는 ①.말하자면, Resources가 설정한 동작을 제외하고, 추가하려면 collection do를 사용하십시오.이번에는 왜 이렇게 안 했을까요? 위에도 user라고 써있어요.id를 지정해야 하기 때문에 (collection do는 id를 지정할 수 없습니다.)

뻔한 일


상술한 조사 결과에 의하면routes 설정에 문제가 있다고 가정한다.원래 Resources가 설정한 동작 이외에 추가된 컬렉션도 있는데 id가 필요할 때도 같은 방법이 있어야 하는데...그렇게 생각해서 알아봤어요.
https://railsguides.jp/routing.html
조금 이해하기 어렵지만 어쨌든 다음 내용이다.
collection do: id가 없는 새 routing 설정
id가 있는 새 루팅 설정하기
member do
  get :index_user
end
그런 것 같아요.이걸로 콘솔 확인...

매개변수를 보내는 중입니다.다만, 이 경우 "user id"가 아닌 "id"입니다.rails routes에서
index_user_blog GET    /blogs/:id/index_user(.:format)     blogs#index_user
그렇기 때문에 user로 보냈습니다.아이디가 아닌 아이디인 것 같은데 괜찮아요.blogs_사용자 설명 controllerid에서 id로 변경합니다.
blogs_controller.rb
(変更前)
def index_user
  @blogs = Blog.where(user_id:params[:user_id])
end

(変更後)
def index_user
  @blogs = Blog.where(user_id:params[:id])
end
이렇게 해서 마침내 모든 사용자의 투고 일람표를 나타냈다.①의 get'/user/user를 잊지 않기 위해블로그를 삭제합니다.
나는 Rails 가이드를 참고했다.
https://railsguides.jp/routing.html
아래 Rails 마법사에서 발췌합니다.
2.10.1 メンバールーティングを追加する
メンバー (member) ルーティングを追加したい場合は、memberブロックをリソースブロックに1つ追加します。

resources :photos do
  member do
    get 'preview'
  end
end

上のルーティングはGETリクエストとそれに伴う/photos/1/previewを認識し、
リクエストをPhotosコントローラのpreviewアクションにルーティングし、
リソースid値をparams[:id]に渡します。同時に、preview_photo_urlヘルパーと
preview_photo_pathヘルパーも作成されます。

memberルーティングブロックの内側では、認識させるHTTP動詞をルーティング名ごとに指定します。
指定可能なHTTP動詞はget、patch、put、post、deleteです。
memberルーティングが1つだけしかない場合は、以下のようにルーティングで:onオプションを指定することで
ブロックを省略できます。

resources :photos do
  get 'preview', on: :member
end

:onオプションを省略しても同様のmemberルーティングが生成されます。
この場合リソースidの値の取得にparams[:id]ではなくparams[:photo_id]を使う点が異なります。
ルーティングヘルパーも、preview_photo_urlがphoto_preview_urlに、preview_photo_pathが
photo_preview_pathにそれぞれリネームされます。

좋은 웹페이지 즐겨찾기