如何从默认rails中检索数据:数据哈希?

时间:2016-11-21 10:39:00

标签: ruby-on-rails ruby-on-rails-4 link-to

我有类似的东西(基本下拉菜单):



<ul class="dropdown-menu">
   <% @sidebar_categories.each do |category| %>
     <li data-toggle="modal" data-target="#howtoFormModal">
       <%= link_to category.title, "#", :data => { :id => category.id } %>
     </li>
    <% end %>
 </ul>
&#13;
&#13;
&#13;

我有一个模态内的形式

&#13;
&#13;
<%= simple_form_for @howto, url: category_howtos_path(@category) do |f| %>
  #whatever here...
<% end %>
&#13;
&#13;
&#13;

我想获取之前在默认rails:data hash中传递的id,并将id放在表单url category_howtos_path(id将在这里)

我该怎么办呢?

1 个答案:

答案 0 :(得分:1)

我不是100%肯定你想要实现的目标,但也许你可以使用查询字符串,docs on link_to有你如何做的例子。

所以在你的例子中是这样的:

<ul class="dropdown-menu">
   <% @sidebar_categories.each do |category| %>
     <li data-toggle="modal" data-target="#howtoFormModal">
       <%= link_to category.title, some_path(id: category.id) %>
     </li>
    <% end %>
 </ul>
 # Which has an output like this

<a href="/some-path?id=1">Category Title</a>

...然后

<%= simple_form_for @howto, url: category_howtos_path(params[:id]) do |f| %>
  #whatever here...
<% end %>

修改

根据第一个代码段中li的属性,您希望在点击时切换模式,然后在simple_form_for网址参数中设置切换模式的ID。问题是在ruby中页面加载之前已经评估了category_howtos_path。因此,如果您想要更改该URL,您可能需要使用javascript。所以也许在javascript中加载模态并进行事件回调。

使用JS代码段编辑

  

是的,我已经尝试了,但也许我做错了。

 $('#howtoFormModal').on('show.bs.modal', function (e) {

      //but I think that the JS will give a lot due to the rails loop 
      var categoryId = $("#li-id").data('id')

      // just to show the id on the modal
      $('#howtoFormModalLabel').val(categoryId); 
 });

您想要获取您点击的元素ID

 $('#howtoFormModal').on('show.bs.modal', function (e) {

  // The categoryId from here needs to be from the clicked on element 
  var categoryId = $(e.relatedTarget).data('id')

  // just to show the id on the modal
  $('#howtoFormModalLabel').val(categoryId); 

});