我有类似的东西(基本下拉菜单):
<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;
我有一个模态内的形式
<%= simple_form_for @howto, url: category_howtos_path(@category) do |f| %>
#whatever here...
<% end %>
&#13;
我想获取之前在默认rails:data hash中传递的id,并将id放在表单url category_howtos_path(id将在这里)
我该怎么办呢?
答案 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);
});