0

选择商店后,我只想查看属于所选商店的分类法。有谁知道我该怎么做?使用 Ruby 或 Javascript

<h3>Stores Offered In</h3>
  <ul class="multi-column-checkbox">
    <% for store in Store.all %>
        <li><%= check_box_tag "idea[store_ids][]", store.id, 
@idea.stores.include?(store) %> <%= store.name %></li>
    <% end %>
  </ul>
  <br />

  <h3>Taxonomies Offered In</h3>
  <% for store in Store.all %>
     <% if store.has_taxonomies? %>
          <ul class="multi-column-checkbox">
            <h4><%= store.name %></h4>
            <% for taxonomy in store.taxonomies %>
                <li><%= check_box_tag "idea[taxonomy_ids][]", 
taxonomy.id, @idea.taxonomies.include?(taxonomy) %> <%= taxonomy.name %></li>
            <% end %>
          </ul>
     <% end %>
  <% end %>
4

1 回答 1

0

好的——这里发生了很多事情。首先,我假设您使用的是 rails 3 或 rails 4

而且它看起来像嵌套在想法模型中,这里没有考虑到,你必须为此修改代码。

首先 - 尽量不要直接调用视图中的模型,除非你绝对必须这样做,这应该在你的控制器中完成。此外,在您看来,请确保您有一个用于稍后要进行的 jquery 调用的分类法的绑定元素。

your_main_view_referenced_in_your_question.html.erb

<h3>Stores Offered In</h3>
<ul class="multi-column-checkbox">
  <%- @stores.each do |store| %>
    <li>
    <%= check_box_tag "store[ids]", store.id, false, :data => {:remote => true, :url => url_for( :action => 'get_taxonomies', :id => store.id ), :method => :put}, :class => 'input-large' %>
    <%= store.name %>
    </li>
  <% end %>
</ul>
<br/>
<div id="taxonomies">
</div>

接下来,您需要创建一个控制器操作来响应您的 ajax 调用。

stores_controller.rb

### Add an action to let you do an ajax call
def get_taxonomies
  @store = Store.find params[:id]
end

现在您需要创建一个从控制器操作呈现的 ujs 文件

get_taxonomies.js.erb

if ($(".store_" + <%= params[:id] %>).length) {
  $(".store_" + <%= params[:id ] %>).remove();
} else {
  $('#taxonomies').append("<%= escape_javascript(render(partial: '/stores/taxonomy', locals: {stores: @stores } )) %>");
}

if ($("[class^=store_]").length > 0) {
  if ( $('#taxonomies').find('h3').length ) { 
    // do nothing - leave the h3 where it is
  } else {
    $('#taxonomies').prepend("<h3>Store Taxonomies</h3>");
  }
} else {
    $('#taxonomies').find("h3").remove();
}

现在,虽然您可以将所有 html 内联写入 js 文件,但如果您将其放入部分文件中,稍后编辑它会更难看且更容易 - 因为 js.erb 文件正在调用分类法,所以您需要使用部分文件一样的名字

_taxonomy.html.erb

<div class="store_<%=@store.id%>">
  <h4><%= @store.name %></h4>
  <ul class="multi-column-checkbox">
    <%- @store.taxonomies.each do |taxonomy| %>
      <li>
      <%= check_box_tag "[taxonomy_ids][]", taxonomy.id, false %>
      <%= taxonomy.name %>
    <% end %>
    </li>
  </ul>
</div>
于 2013-10-02T21:26:20.580 回答