Here is the live demoGörünümde SQL yazmadan aynı tablodaki koşulları nasıl gösterebilirim?
Tablolar:
|perfils|
|id| |name|
1 Administrator
2 Admin for products
|grants|
|id| |parent_id| |name|
1 0 Module Clients #parent
2 1 Show Client ###child from Module Clients
3 1 New Client ###child = Module Clients
4 1 Edit Client ###child = Module Clients
5 0 Module Products #parent
6 5 Show Product ###child = Module Products
7 5 New Product ###child = Module Products
|perfil_accesses|
|id| |grant_id| |perfil_id|
1 1 1
2 2 1
3 3 1
Kontrolör perfil_controller.rb:
def new
@perfil.new
@grants = Grant.where(parent_id: 0)
end
def create
@perfil = Perfil.new(perfil_params)
if @perfil.save
@accesses.each do |access|
if params["access_"+access.id.to_s] == "on"
perfil_access = Grant.new()
perfil_access.access_id = access.id
perfil_access.perfil_id = @perfil.id
perfil_access.save
end
end
redirect_to perfils_path
else
render :new
end
end
Modelleri
#Perfil.rb
has_many :perfil_accesses
#PerfilAccess.rb
belongs_to :grant
belongs_to :perfil
ebeveynlerden görünümünde SQL metni yazmadan childs satırları göstermek için bir çözüm var mı: Sorun
Burada Görünüm new.html.erb
<script src="https://code.jquery.com/jquery-2.2.1.js"></script>
<script>
$(document).on('change', '.parentCheckBox', function() {
var that = $(this);
that.closest('div').find('.childCheckBox').prop('checked', that.is(':checked'));
$(this).val($(this).prop('checked')?1:0);
});
$(document).on('change', '.childCheckBox', function() {
var that = $(this);
var par = that.closest('ul');
var c = par.find('.childCheckBox').filter(':checked').length;
var parChk = par.closest('div').parent().find('.parentCheckBox');
var checked = c > 0;
$(this).val($(this).prop('checked')?1:0);
parChk.prop('checked', checked);
console.log(checked);
});
</script>
<%= form_for(@perfil) do |f| %>
<%= f.label :name %><br>
<%= f.text_field :name %>
<% @grants.each do |access| %>
<div>
<input type="checkbox" class="parentCheckBox" /> <%= grant.name %>
<a onclick="document.getElementById('div_<%= access.id %>').style.display='';return false;"><img src="https://cdn0.iconfinder.com/data/icons/ie_Bright/512/plus_add_green.png" height="20" width="20"></a>
<a onclick="document.getElementById('div_<%= access.id %>').style.display='none';return false;"><img src="https://cdn0.iconfinder.com/data/icons/ie_Bright/512/minus_remove_green.png" height="20" width="20"></a>
<br/>
<div id="div_<%= access.id %>" style="display:none;">
<ul>
<% Grant.where(parent_id: access.id).each do |grant|%>
<li><input id="access_<%= grant.id %>" name="access_<%= grant.id %>" type="checkbox" class="childCheckBox" /><%= grant.name %></li>
<% end %>
</ul>
</div>
</div>
<% end %>
<%= f.submit %>
<% end %>
mı?
<% Grant.where(parent_id: access.id).each do |grant|%>
<li><input id="access_<%= grant.id %>" name="access_<%= grant.id %>" type="checkbox" class="childCheckBox" /><%= grant.name %></li>
<% end %>
Denedim:
#CONTROLLER
@grants = []
@accesses.each do |access|
@grants << Access.where(parent_id: access.id)
end
#VIEW
<% @accesses.each do |access| %>
<%= access.name %>
<% access.where(parent_id: access.id).each do |grant|
<ul>
<li><%= grant.name %></li>
</ul>
<% end %>
tuttuğunu belirttiniz. Bağışlarla ilgili bir bağlantınız var mı? – trh
evet bunu aldım, yazıyı güncelledim ve modelleri yazdım. –
İlişkilendirmeden aynı tablodan bir sorgu yapıyorum. –