askf789w7 2020-10-29 22:09 采纳率: 0%
浏览 72

编程小白有个Ruby on Rails的问题,现在有个页面显示一列名字+日期的内容,有2个radio button,如何实现按名字和日期排序?

2个radion button在index.html.erb文件中的form_with中,包含submit

第1种是直接对Active Record中的内容进行排序,即修改数据库中的顺序,应该怎么实现?

第2种是不修改Active Record中数据的顺序,只是展示排序后的内容,我现在在这里卡住了,如果index函数的代码比较多的话,form_with的提交会无效,我按照网上的建议,在form_with中加了local: true,但是依然无效

  • 写回答

1条回答 默认 最新

  • 码农阿豪@新空间代码工作室 Java领域优质创作者 2024-07-24 22:49
    关注
    让阿豪来帮你解答,本回答参考chatgpt3.5编写提供,如果还有疑问可以评论或留言
    首先,我们可以使用第1种方法来实现对Active Record中内容的排序。在index.html.erb文件中的form_with中加入两个radio button和一个submit按钮,如下所示:
    <%= form_with(url: your_update_action_path, method: "post") do |f| %>
      <%= f.radio_button :order, "asc" %>
      <%= f.label :asc, "Ascending" %>
      <%= f.radio_button :order, "desc" %>
      <%= f.label :desc, "Descending" %>
      <%= f.submit "Submit" %>
    <% end %>
    

    在controller中处理更新动作your_controller.rb:

    def your_update_action
      if params[:order] == "asc"
        @items = Item.order(:name)
      elsif params[:order] == "desc"
        @items = Item.order(name: :desc)
      end
      render :index
    end
    

    接下来,让我们来实现第2种方法,即不修改Active Record中数据的顺序,只是展示排序后的内容。一个比较简单的方法是通过JavaScript来对页面上的内容进行排序。 首先,在你的index.html.erb文件中,可以使用JavaScript实现对内容的排序:

    <%= form_with(...) do |f| %>
      <%= f.radio_button_tag :order, "asc" %>
      <%= label_tag :asc, "Ascending" %>
      <%= f.radio_button_tag :order, "desc" %>
      <%= label_tag :desc, "Descending" %>
      <%= f.submit "Submit" %>
    <% end %>
    <ul id="items">
      <% @items.each do |item| %>
        <li><%= item.name %></li>
      <% end %>
    </ul>
    <script>
      document.querySelector('form').addEventListener('submit', function(e) {
        e.preventDefault();
        const order = document.querySelector('input[name="order"]:checked').value;
        const items = document.querySelectorAll('#items li');
        let sortedItems = Array.from(items).sort((a, b) => {
          if (order == 'asc') {
            return a.innerHTML.localeCompare(b.innerHTML);
          } else {
            return b.innerHTML.localeCompare(a.innerHTML);
          }
        });
        
        const list = document.querySelector('#items');
        list.innerHTML = '';
        sortedItems.forEach(item => list.appendChild(item));
      });
    </script>
    

    这样,当你选择排序方式后点击提交按钮,页面上显示的内容将会根据你选择的顺序进行排序。因为这种方法是在前端处理,不会改变Active Record中内容的顺序。

    评论

报告相同问题?

悬赏问题

  • ¥30 求给定范围的全体素数p的(p-2)的连乘积
  • ¥15 VFP如何使用阿里TTS实现文字转语音?
  • ¥100 需要跳转番茄畅听app的adb命令
  • ¥50 寻找一位有逆向游戏盾sdk 应用程序经验的技术
  • ¥15 请问有用MZmine处理 “Waters SYNAPT G2-Si QTOF质谱仪在MSE模式下采集的非靶向数据” 的分析教程吗
  • ¥50 opencv4nodejs 如何安装
  • ¥15 adb push异常 adb: error: 1409-byte write failed: Invalid argument
  • ¥15 nginx反向代理获取ip,java获取真实ip
  • ¥15 eda:门禁系统设计
  • ¥50 如何使用js去调用vscode-js-debugger的方法去调试网页