프로그래밍 초보자가 rails 강좌에 간이 검색 기능을 추가할 때의 생각을 최대한 언어화하다
출력 같은 것도 중요하다고 생각해서 rails 튜토리얼의 확장 기능으로 제안한 사용자 이름의 검색 기능을 만들고 그 동안 초보자의 사고를 언어화해서 남기고 싶어서 이 글을 썼습니다.
개시하다
사용자 이름의 검색 기능은 어떤 절차입니까?문제를 고려하다
1. 사용자로부터 검색된 사용자 이름 수신
2. 이 데이터에 따라users표로name로 검색@users
3. 검색용view 제작은 번거롭습니다.view는 rails 강좌에서 제작한 index입니다.html.erb를 이용하여 검색 결과 보이기
나는 상기 세 가지를 고려했다.나는 이 대략적인 생각에 따라 기능을 추가하고 싶다.
(정말 이런 느낌 핸드폰 수첩에 w라고 적혀있다)
정말 간단한 기능이 추가됐지만, 가능한 한 복사·붙여넣기가 아닌 내용을 이해하면서 쓰도록 했다.사실 이 코드를 쓸 때 계속 노력할 거예요.
1. 사용자로부터 검색된 사용자 이름 수신
받아들이려면 포즈만 해도 알 것 같아요.
_seach_name_form.html.erb
<%= form_tag search_path, :method => 'get' do %>
<p>
<%= text_field_tag :search_name,params[:search_name], class: 'form-control'%>
<%= submit_tag "Search"%>
</p>
<% end%>
모델에 의존하는 게 아니라고 생각해서formDB를 가져오거나 변경하는 것이 아니므로 GET 방법text_field_하나의 매개 변수는 원소의 이름이고, 두 번째는 값이다.
나는 가장 간단한 방법은 그것을 원래의 페이지에 묻는 것이라고 생각한다.에 기술됨
index.html.erb
<% provide(:title, 'All users') %>
<h1>All users</h1>
<%= render 'search/search_name_form' %>
<%= will_paginate %>
<ul class="users">
<%= render @users %>
</ul>
<%= will_paginate %>
2. 이 데이터에 따라users표부터name까지 검색하여 @users에 넣기
컨트롤러에 where를 하나씩 쓰는 것보다 User를 가지고 검색할 수 있는 방법이 대상에 더 적합하다고 생각합니다.
User에 메서드 추가
user.rb
class User < ApplicationRecord
def self.search(name)
where('name LIKE ?',"%#{name}%")
end
self를 넣지 않으면 실례적인 방법이 됩니다(user=User.new가 정의한user에서만 사용할 수 있습니다). 그래서 넣습니다.LINE으로 흐림 검색 가능
?왜냐하면 값을 직접 전달하지 않으면 SQL에 의해 안전하지 않아요.
그리고 실제 컨트롤러에 동작을 만들어서view값을 줍니다.
어떤 동작을 추가하려면 컨트롤러를 다시 만들어요
(이곳은 아마도 가장 구설수에 오르는 곳일 것이다. 역시 Userscontroller에 쓰는 것이 좋겠다
가장'왜 이러는지'설명할 수 없음) (Userscontroller에 검색 액션을 만들어야 하지 않을까)
seach_controller.rb
class SearchController < ApplicationController
def search
@users = User.search(params[:search_name]).paginate(page: params[:page], per_page: 5)
render 'users/index'
end
정의 동작@users에 폼에서 받은 데이터로 검색한 데이터를 입력하십시오.param[:search name]을 매개 변수로 search, index에 넣습니다.html.eb를 재사용하기 위해paginate를 추가했습니다.그리고 새로운 동작을 정의했기 때문에routs를 추가했습니다
routs.rb
get 'search', to:'search#search'
여기 더러워. 이름 조심하는 게 좋을 것 같아.3. 검색 결과의view 제작은 번거롭습니다.view는 rails 강좌에서 만든 index입니다.html.erb를 이용하여 검색 결과 보이기
render's index에서view 재사용
여기 곤란한 일이 하나 있다
index.html.erb
<% provide(:title, 'All users') %>
<h1>All users</h1>
<%= render 'search/search_name_form' %>
<%= will_paginate %>
<ul class="users">
<%= render @users%>
</ul>
<%= will_paginate%>
rails 튜토리얼 같은 index.html.erb를 사용하면paginate에 효과가 없어요!및 오류입니다.살짝 밀었는데 지금까지 윌이었어paginate가 자원 기본값에서 파라미터를 바꾼 것 같아서 괜찮은 것 같습니다.
(지금까지 Resources:users를 통해 접근한 @users 이 기본값입니다.)
이번에는 자원 접근을 사용하지 않았습니다. 지정이 필요합니다
index.html.erb
<% provide(:title, 'All users') %>
<h1>All users</h1>
<%= render 'search/search_name_form' %>
<%= will_paginate %>
<ul class="users">
<%= render @users%>
</ul>
<%= will_paginate%>
이렇게 하면 자원으로 접근하지 않아도 윌을 통과할 수 있다나 파인애플 쓸 수 있어.새로운 뷰가 안 돼서 다행이다.느낌 좋아!
끝말
자신의 방식대로 언어화하면 애매한 부분을 이해할 수 있다.루비가 아닌 루비온 레일스를 배우는 듯한 느낌이지만 자신이 생각하는 대로 브라우저에서 조작할 수 있다면 즐겁다.
그래도 rails 튜토리얼이 끝나도 배울 게 많네요.차라리밀어붙일수록배울게 많아졌다.프로그래밍의 세계는 매우 심오하다.
만약 무슨 지적이 있다면, 나에게 메시지를 남길 수 있다면 나는 매우 기쁠 것이다.
여기까지 읽어주셔서 감사합니다.
Reference
이 문제에 관하여(프로그래밍 초보자가 rails 강좌에 간이 검색 기능을 추가할 때의 생각을 최대한 언어화하다), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/QWYNG/items/d22331c949cecd4aa62c
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여(프로그래밍 초보자가 rails 강좌에 간이 검색 기능을 추가할 때의 생각을 최대한 언어화하다), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/QWYNG/items/d22331c949cecd4aa62c텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)