2个radion button在index.html.erb文件中的form_with中,包含submit
第1种是直接对Active Record中的内容进行排序,即修改数据库中的顺序,应该怎么实现?
第2种是不修改Active Record中数据的顺序,只是展示排序后的内容,我现在在这里卡住了,如果index函数的代码比较多的话,form_with的提交会无效,我按照网上的建议,在form_with中加了local: true,但是依然无效
2个radion button在index.html.erb文件中的form_with中,包含submit
第1种是直接对Active Record中的内容进行排序,即修改数据库中的顺序,应该怎么实现?
第2种是不修改Active Record中数据的顺序,只是展示排序后的内容,我现在在这里卡住了,如果index函数的代码比较多的话,form_with的提交会无效,我按照网上的建议,在form_with中加了local: true,但是依然无效
让阿豪来帮你解答,本回答参考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中内容的顺序。