중간 테이블을 사용하여 태그 기능 (가져오지 않음)
목표
여러 개의 체크 상자를 선택하여 중간 표를 통해 표시 기능을 실현합니다.
개발 환경
・Ruby:2.5.7
・Rails:5.2.4
・Vagrant:2.2.7
가상 상자: 6.1
・OS:macOS Catalina
E-R 그림
상술한 이미지는 이번 설치의 인상이다.
이번에는 제가 설치한 사우나 종류를 여러 개 선택해서 등록한 예로 설명해 주십시오.
사전 준비
초상화 같은 사우나를 새로 만드는 그림이 준비되어 있다.
이번에 사용한 것은 サウナジャンルの複数のチェックボックスを選択して中間テーブルであるサウナジャンルを用いて実装する
방법이다.
등록 기능과 같은 기본 기능은 이미 설치된 것을 전제로 설명한다.
모델에서 연관 설명하기
app/models/sauna.rbclass Sauna < ApplicationRecord
has_many :sauna_genres, dependent: :destroy
has_many :genres, through: :sauna_genres
end
app/models/sauna_genre.rbclass SaunaGenre < ApplicationRecord
belongs_to :genre
belongs_to :sauna
end
app/models/genre.rbclass Genre < ApplicationRecord
has_many :sauna_genres
has_many :saunas, through: :sauna_genres
end
controller
app/controllers/saunas_controller.rb def create
@sauna = Sauna.new(sauna_params)
@sauna.user_id = current_user.id
if @sauna.save
redirect_to user_sauna_path(@sauna)
else
render 'new'
end
end
#省略
def sauna_params
params.require(:sauna).permit(
:name,
genre_ids: []
)
end
genre_ids: []
여러 확인란의 값을 배열을 통해 전달할 수 있습니다.
html.erb<div>
<%=f.label :genre_ids, "ジャンル機能" %>
<span>
<% Genre.all.each do |genre| %>
<%= f.check_box :genre_ids,
{ multiple: true, checked: @sauna.genres.find_by(id: genre.id).present?,
include_hidden: false }, genre[:id] %>
<label class="form-check-label">
<%= genre.name %>
</label>
<% end %>
</span>
</div>
form.check_box :label_ids
→params의 값으로"label_ids"=>["1", "2", "3"]
는 이런 형식으로 산열 키가 있는 값을 보낼 수 있다.multiple
옵션은 여러 개의 체크 상자 매개 변수를 그룹으로 보낼 수 있도록 합니다.checked: @task.labels.find_by(id: label.id).present?
화면 편집 등에 등록된 ラベル
에서 검사한 것이다.include_hidden: false
→ 등록되지 않은 항목에 대해서는 매개 변수를 보내지 않는 방법입니다.
이렇게 설치하면 언뜻 봐도 여러 개의 중간표를 만들 수 있고 편집할 때도 잘 검사해 문제가 없지만 편집 화면에서 검사를 모두 취소하고 업데이트해도 종류의 여러 이름이 사라지지 않는다.
어떤 이유인지,,,, 이 실현 방법은 비어서 보내면 값으로 nil로 되돌아옵니다.
그걸 해결하기 위해서 빨대 파라미터에 공을 들였어요.
app/controllers/saunas_controller.rb#省略
def sauna_params
values = params.require(:sauna).permit(
:name,
genre_ids: []
)
if values[:genre_ids].nil?
values[:genre_ids] = []
end
return values
end
이렇게 함으로써genre_만약nil이ids로 돌아갈 때 빈 배열을 보내면 종류가 없는 것도 만들 수 있습니다.
종류를 만들었으니 종류가 없을 것 같지만 눈치챘기 때문에 비망록으로 남겼어요.
감사합니다
Reference
이 문제에 관하여(중간 테이블을 사용하여 태그 기능 (가져오지 않음)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/aoshi_0402/items/807e0effbc62161fc3f9
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
・Ruby:2.5.7
・Rails:5.2.4
・Vagrant:2.2.7
가상 상자: 6.1
・OS:macOS Catalina
E-R 그림
상술한 이미지는 이번 설치의 인상이다.
이번에는 제가 설치한 사우나 종류를 여러 개 선택해서 등록한 예로 설명해 주십시오.
사전 준비
초상화 같은 사우나를 새로 만드는 그림이 준비되어 있다.
이번에 사용한 것은 サウナジャンルの複数のチェックボックスを選択して中間テーブルであるサウナジャンルを用いて実装する
방법이다.
등록 기능과 같은 기본 기능은 이미 설치된 것을 전제로 설명한다.
모델에서 연관 설명하기
app/models/sauna.rbclass Sauna < ApplicationRecord
has_many :sauna_genres, dependent: :destroy
has_many :genres, through: :sauna_genres
end
app/models/sauna_genre.rbclass SaunaGenre < ApplicationRecord
belongs_to :genre
belongs_to :sauna
end
app/models/genre.rbclass Genre < ApplicationRecord
has_many :sauna_genres
has_many :saunas, through: :sauna_genres
end
controller
app/controllers/saunas_controller.rb def create
@sauna = Sauna.new(sauna_params)
@sauna.user_id = current_user.id
if @sauna.save
redirect_to user_sauna_path(@sauna)
else
render 'new'
end
end
#省略
def sauna_params
params.require(:sauna).permit(
:name,
genre_ids: []
)
end
genre_ids: []
여러 확인란의 값을 배열을 통해 전달할 수 있습니다.
html.erb<div>
<%=f.label :genre_ids, "ジャンル機能" %>
<span>
<% Genre.all.each do |genre| %>
<%= f.check_box :genre_ids,
{ multiple: true, checked: @sauna.genres.find_by(id: genre.id).present?,
include_hidden: false }, genre[:id] %>
<label class="form-check-label">
<%= genre.name %>
</label>
<% end %>
</span>
</div>
form.check_box :label_ids
→params의 값으로"label_ids"=>["1", "2", "3"]
는 이런 형식으로 산열 키가 있는 값을 보낼 수 있다.multiple
옵션은 여러 개의 체크 상자 매개 변수를 그룹으로 보낼 수 있도록 합니다.checked: @task.labels.find_by(id: label.id).present?
화면 편집 등에 등록된 ラベル
에서 검사한 것이다.include_hidden: false
→ 등록되지 않은 항목에 대해서는 매개 변수를 보내지 않는 방법입니다.
이렇게 설치하면 언뜻 봐도 여러 개의 중간표를 만들 수 있고 편집할 때도 잘 검사해 문제가 없지만 편집 화면에서 검사를 모두 취소하고 업데이트해도 종류의 여러 이름이 사라지지 않는다.
어떤 이유인지,,,, 이 실현 방법은 비어서 보내면 값으로 nil로 되돌아옵니다.
그걸 해결하기 위해서 빨대 파라미터에 공을 들였어요.
app/controllers/saunas_controller.rb#省略
def sauna_params
values = params.require(:sauna).permit(
:name,
genre_ids: []
)
if values[:genre_ids].nil?
values[:genre_ids] = []
end
return values
end
이렇게 함으로써genre_만약nil이ids로 돌아갈 때 빈 배열을 보내면 종류가 없는 것도 만들 수 있습니다.
종류를 만들었으니 종류가 없을 것 같지만 눈치챘기 때문에 비망록으로 남겼어요.
감사합니다
Reference
이 문제에 관하여(중간 테이블을 사용하여 태그 기능 (가져오지 않음)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/aoshi_0402/items/807e0effbc62161fc3f9
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
초상화 같은 사우나를 새로 만드는 그림이 준비되어 있다.
이번에 사용한 것은
サウナジャンルの複数のチェックボックスを選択して中間テーブルであるサウナジャンルを用いて実装する
방법이다.등록 기능과 같은 기본 기능은 이미 설치된 것을 전제로 설명한다.
모델에서 연관 설명하기
app/models/sauna.rbclass Sauna < ApplicationRecord
has_many :sauna_genres, dependent: :destroy
has_many :genres, through: :sauna_genres
end
app/models/sauna_genre.rbclass SaunaGenre < ApplicationRecord
belongs_to :genre
belongs_to :sauna
end
app/models/genre.rbclass Genre < ApplicationRecord
has_many :sauna_genres
has_many :saunas, through: :sauna_genres
end
controller
app/controllers/saunas_controller.rb def create
@sauna = Sauna.new(sauna_params)
@sauna.user_id = current_user.id
if @sauna.save
redirect_to user_sauna_path(@sauna)
else
render 'new'
end
end
#省略
def sauna_params
params.require(:sauna).permit(
:name,
genre_ids: []
)
end
genre_ids: []
여러 확인란의 값을 배열을 통해 전달할 수 있습니다.
html.erb<div>
<%=f.label :genre_ids, "ジャンル機能" %>
<span>
<% Genre.all.each do |genre| %>
<%= f.check_box :genre_ids,
{ multiple: true, checked: @sauna.genres.find_by(id: genre.id).present?,
include_hidden: false }, genre[:id] %>
<label class="form-check-label">
<%= genre.name %>
</label>
<% end %>
</span>
</div>
form.check_box :label_ids
→params의 값으로"label_ids"=>["1", "2", "3"]
는 이런 형식으로 산열 키가 있는 값을 보낼 수 있다.multiple
옵션은 여러 개의 체크 상자 매개 변수를 그룹으로 보낼 수 있도록 합니다.checked: @task.labels.find_by(id: label.id).present?
화면 편집 등에 등록된 ラベル
에서 검사한 것이다.include_hidden: false
→ 등록되지 않은 항목에 대해서는 매개 변수를 보내지 않는 방법입니다.
이렇게 설치하면 언뜻 봐도 여러 개의 중간표를 만들 수 있고 편집할 때도 잘 검사해 문제가 없지만 편집 화면에서 검사를 모두 취소하고 업데이트해도 종류의 여러 이름이 사라지지 않는다.
어떤 이유인지,,,, 이 실현 방법은 비어서 보내면 값으로 nil로 되돌아옵니다.
그걸 해결하기 위해서 빨대 파라미터에 공을 들였어요.
app/controllers/saunas_controller.rb#省略
def sauna_params
values = params.require(:sauna).permit(
:name,
genre_ids: []
)
if values[:genre_ids].nil?
values[:genre_ids] = []
end
return values
end
이렇게 함으로써genre_만약nil이ids로 돌아갈 때 빈 배열을 보내면 종류가 없는 것도 만들 수 있습니다.
종류를 만들었으니 종류가 없을 것 같지만 눈치챘기 때문에 비망록으로 남겼어요.
감사합니다
Reference
이 문제에 관하여(중간 테이블을 사용하여 태그 기능 (가져오지 않음)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/aoshi_0402/items/807e0effbc62161fc3f9
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
class Sauna < ApplicationRecord
has_many :sauna_genres, dependent: :destroy
has_many :genres, through: :sauna_genres
end
class SaunaGenre < ApplicationRecord
belongs_to :genre
belongs_to :sauna
end
class Genre < ApplicationRecord
has_many :sauna_genres
has_many :saunas, through: :sauna_genres
end
def create
@sauna = Sauna.new(sauna_params)
@sauna.user_id = current_user.id
if @sauna.save
redirect_to user_sauna_path(@sauna)
else
render 'new'
end
end
#省略
def sauna_params
params.require(:sauna).permit(
:name,
genre_ids: []
)
end
<div>
<%=f.label :genre_ids, "ジャンル機能" %>
<span>
<% Genre.all.each do |genre| %>
<%= f.check_box :genre_ids,
{ multiple: true, checked: @sauna.genres.find_by(id: genre.id).present?,
include_hidden: false }, genre[:id] %>
<label class="form-check-label">
<%= genre.name %>
</label>
<% end %>
</span>
</div>
#省略
def sauna_params
values = params.require(:sauna).permit(
:name,
genre_ids: []
)
if values[:genre_ids].nil?
values[:genre_ids] = []
end
return values
end
Reference
이 문제에 관하여(중간 테이블을 사용하여 태그 기능 (가져오지 않음)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/aoshi_0402/items/807e0effbc62161fc3f9텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)