ajax와 rails로 요소를 열고 닫고 싶습니다.
이번에는
is_shop
라는 열에서 조건 분기를 합니다.그래서 enum에서 동시에 저장할 수 있는 항목(값)을 정의.
expert_collection.rb
class ExpertCollection < ActiveRecord::Base
enum is_shop: { limited: 0 , altogether: 1 }
end
#この書き方はis_shopがinteger型
_form.html.erb.rb
<script type="text/javascript">
$(function(){
=====①======
<% if @expert_collection.is_shop == 'limited' %>
$('#is_shop_area_1').show();
<% else %>
$('#is_shop_area_1').hide();
<% end %>
============
=====②======
$("#expert_collection_is_shop_limited").click(function(){
$('#is_shop_area_1').show();
});
$("#expert_collection_is_shop_altogether").click(function(){
$('#is_shop_area_1').hide();
});
============
// 全て選択・解除
CLASS_NAME_INDEX = 0;
VALUE_INDEX = 1;
var set_all_is_shop_value = function(is_shop_name, value){
$('.' + is_shop_name).each(function() {
$(this).attr("checked", value);
});
};
$(".set_all_button").click(function(){
class_name_and_value = $(this).attr("id").split("-");
if ( class_name_and_value[VALUE_INDEX] == 'false' ) {
class_name_and_value[VALUE_INDEX] = false;
}
set_all_is_shop_value(class_name_and_value[CLASS_NAME_INDEX], class_name_and_value[VALUE_INDEX]);
});
});
</script>
<%= form_for [:ar_admin, @expert_collection], :html => {:multipart => true} do |f| %>
<tr>
<th scope="row">実施店舗</th>
<td>
<%= f.radio_button :is_shop, :limited %><label for="_is_shop_1">店舗限定 </label>
<%= f.radio_button :is_shop, :altogether %><label for="_is_shop_2">全て </label>
</td>
</tr>
<table class="form_area " id="is_shop_area_1">
<tr>
<th scope="row">対象店舗</th>
<td>
<% for shop in current_site.real_shops %>
<%= check_box_tag "shop_ids[]", shop.id, @expert_collection.real_shops.ids.include?(shop.id), :id => "shop_id_#{shop.id}" , :class => 'shop'%>
<%= label_tag "shop_id_#{shop.id}", shop.name %>
<% end %>
<% if current_site.real_shops.present? %>
<br />
<input type="button" value="全て選択" id="shop-true" class="set_all_button" /> <input type="button" value="全て解除" id="shop-false" class="set_all_button" />
<% end %>
</td>
</tr>
</table>
<p class="change"><a href="<%= url_for :action => :index %>"><img src="/images/ar_admin/form/btn_prev.jpg" alt="前のページへ戻る" class="nav" /></a> <input type="image" src="/images/ar_admin/form/btn_regist.jpg" alt="登録する" class="nav" /></p>
<% end %>
js 속에 고리고리 rails의 문법을 쓰는 것 같다
limited'
은 enum의 기법. enum이 아니면 필요없는 부분이라고 생각됩니다.①is_shop의 값이 limited(왼쪽의 버튼)이면 아래의 테이블 열림 limited가 아니면 숨긴다(이것은 편집 화면의 때의 분기.처음에 값이 들어가 있는지 보기 위해)
②도 의미는 ①과 동일
expert_collections_controller.rb
def edit
@expert_collection = ExpertCollection.site(current_site.id).find(params[:id])
end
def update
@expert_collection = ExpertCollection.site(current_site.id).find(params[:id])
@expert_collection.site_id = current_site.id
@expert_collection.real_shops = RealShop.find(params[:shop_ids]) if params[:shop_ids].present?
@expert_collection.attributes = params[:expert_collection] ☆
if @expert_collection.save ☆
redirect_to ar_admin_expert_collections_path, notice: "エキスパートコレクションを更新しました。"
else
render :edit
end
end
업데이트시 ☆ 부분이
if @expert_collection.update_attributes(params[:expert_collection])
이면 안되고 새롭게 건너온 파라미터를 추가하고 다시 save
해주면 잘 업데이트되지 않는다
Reference
이 문제에 관하여(ajax와 rails로 요소를 열고 닫고 싶습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/rainbow___0/items/978ae400b5d4484c7f14텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)