Rails 階層カテゴリー 編集時の取得
解決したいこと
投稿を編集する際に階層カテゴリーの取得を行いたいです。
現状だと編集時に毎回カテゴリーを選択しないといけないです。
※カテゴリー以外は情報を取得できています。
ご教授いただけないでしょうか。宜しくお願い致します。
該当するソースコード
#item.rb
class Item < ApplicationRecord
belongs_to :category
end
#category.rb
class Category < ApplicationRecord
has_many :items
has_ancestry
end
#items_controller.rb
class ItemsController < ApplicationController
before_action :set_item, only: [:show, :edit, :update, :destroy]
before_action :set_parents, only: [:new, :create,:edit, :update]
def index
end
def new
@item = Item.new
end
def create
@item = Item.new(item_params)
if @item.save
redirect_to root_path
else
render :new
end
end
def edit
end
def update
if @item.update(item_params)
redirect_to item_path(@item.id)
else
render :edit
end
end
def destroy
item = Item.find(params[:id])
item.destroy
redirect_to root_path
end
def show
end
def get_category_children
@category_children = Category.find("#{params[:parent_id]}").children
end
private
def item_params
params.require(:item).permit(:title, :category_id).merge(user_id: current_user.id)
end
def set_item
@item = Item.find(params[:id])
end
def set_parents
@parents = Category.where(ancestry: nil)
end
end
#category.js
$(function(){
function appendOption(category){
var html = `<option value="${category.id}">${category.name}</option>`;
return html;
}
function appendChildrenBox(insertHTML){
var childSelectHtml = "";
childSelectHtml = `<div class="category__child" id="children_wrapper">
<select id="child__category" name="item[category_id]" class="category_child">
<option value="">選択してください</option>
${insertHTML}
</select>
</div>`;
$('.append__category').append(childSelectHtml);
}
$('#item_category_id').on('change',function(){
var parentId = document.getElementById('item_category_id').value;
if (parentId != ""){
$.ajax({
url: '/items/get_category_children/',
type: 'GET',
data: { parent_id: parentId },
dataType: 'json'
})
.done(function(children){
$('#children_wrapper').remove();
var insertHTML = '';
children.forEach(function(child){
insertHTML += appendOption(child);
});
appendChildrenBox(insertHTML);
if (insertHTML == "") {
$('#children_wrapper').remove();
}
})
.fail(function(){
alert('カテゴリー取得に失敗しました');
})
}else{
$('#children_wrapper').remove();
}
});
});
0