如何传递数据库ID到Rails URL路径

How to pass database ID to Rails URL path

本文关键字:Rails URL 路径 ID 何传递 数据库      更新时间:2023-09-26

所以我有一个下拉菜单,它包含所有的标题从我创建的数据库。无论我选择了什么标题,我都试图将其数值(ID)从数据库传递到URL路径参数。

这是到目前为止我在index.erb.html文件中得到的内容

<%= button_to "SHOW", show_articles_link(*Enter ID Parameter*), :method => 'get' %>
在我的ArticlesController文件中,我写了
def show
   @article = Article.find(params[:id])
end

我不确定如何将其ID值传递给该参数。我想过使用像

这样的JavaScript
var id = document.getElementById('articles').value;

但是我不完全确定如何将这个变量传递给参数。

还有别的方法吗?任何帮助都会很感激。谢谢!

假设您在索引页上显示这个<%= button_to "SHOW", show_articles_link(*Enter ID Parameter*), :method => 'get' %>按钮。

所以在索引页上你必须有像@articles这样的变量你要像

<% @articles.each do |article| %>
  <%= button_to "SHOW", show_articles_link(article.id), :method => :get
<% end %>

你有两种不同的方法来解决这个问题:

  1. 使用表单&提交

将下拉菜单和按钮封装在表单中。表单应该使用GET方法指向show action URL。下拉菜单应该是一个元素id为"id"的选择(你想传递给show方法的参数的名称)。按钮应该触发表单的提交。假设您的文章属于@articles,并且每篇文章都有一个id和一个title:

<%= form_tag show_articles_link, method: :get do -%>
  <%= select_tag :id, options_from_collection_for_select(@articles, "id", "title") %>
  <%= submit_tag "SHOW" %>
<% end -%>
使用javascript
  • 将下拉菜单的"change"事件绑定到一个函数,该函数使用所选文章的(数据库)id更新/重写按钮的"href"属性。将按钮的默认href设置为下拉列表中默认选择的文章的href。使用jQuery让事情变得更简单:

    在你看来:

    <%= select_tag :articles, options_from_collection_for_select(@articles, "id", "title") %>
    <%= link_to "SHOW", show_articles_link(id: @articles.first.id), id: "myButton", class: "btn" %>
    

    在您的视图中(使用<script>标签)或在单独的javascript资源中:

    $(document).on "change", "#articles", function() {
      $("#myButton").attr("href") = "/article/" + $(this).val();
    };
    

    重要:你可能需要编辑javascript来反映你的显示文章路由是如何定义的。在上面的javascript代码中,假设路由被定义为'/article/:id'