gpt4 book ai didi

ruby-on-rails - Rails4 动态选择下拉菜单

转载 作者:行者123 更新时间:2023-12-04 06:26:49 24 4
gpt4 key购买 nike

我正在尝试使用 form_tag 在搜索表单中设置一些动态下拉选择菜单。我想要的是与在 Railcasts #88 中找到的示例类似的功能

模型:

class Count < ActiveRecord::Base
belongs_to :host
end

class Host < ActiveRecord::Base
belongs_to :site
has_many :counts
end

class Site < ActiveRecord::Base
belongs_to :state
has_many :hosts
end

class State < ActiveRecord::Base
has_many :sites
end

查看:

<%= form_tag(counts_path, :method => "get", id: "search-form") do %>
<%= select_tag "state_id", options_from_collection_for_select(State.all.order(:name), :id, :name) %>
<%= select_tag "site_id", options_from_collection_for_select(Site.all.order(:name), :id, :name) %>
<% end %>

一个州有_很多站点,有_很多主机,有很多计数。或者相反,Counts belong_to Host which belongs_to Site 属于 State

所以我想从“状态”下拉列表中选择一个状态,然后根据它们通过主机关联的状态“分组”站点。

我一直在努力处理这种嵌套关联,似乎无法弄清楚如何构建 grouped_collection_select。

我知道我忽略了一些明显的东西!肯定可以使用一些指针...

最佳答案

您可以触发 jquery-ajax 请求。第一个选择框中的更改事件将调用 Controller 上的操作,被调用的方法将通过 ajax 调用更改第二个下拉列表的值。简单示例:

在你的 View 文件中:

<%= select_tag 'state_id', options_for_select(State.all.order(:name), :id, :name) %>

<%= select_tag "site_id", options_for_select(Site.all.order(:name), :id, :name) %>

在该 Controller 的 JS 文件中:

$(document).on('ready page:load', function () {
$('#state_id').change(function(event){
$("#site_id").attr('disabled', 'disabled')
$.ajax({
type:'post',
url:'/NameOfController/NameOfMethod',
data:{ state_id: $(this).val() },
dataType:"script"
});
event.stopImmediatePropagation();
});

});

在 NameOfController.rb 中

def NameOfMethod
##no need to write anything
end

在 NameOfMethod.js.erb 中

<% if params[:state_id].present? %>
$("#site_id").html("<%= escape_javascript(render(partial: 'site_dropdown'))%>")
<% end %>

在 _site_dropdown.html.erb 文件中:

<% if params[:state_id].present? %>
<%= select_tag 'site_id', options_for_select(Site.where("state_id = ?", params[:state_id])) %>
<% else %>
<%= select_tag "site_id", options_for_select(Site.all.order(:name), :id, :name) %>

因此它将根据所选状态下拉列表更改站点下拉列表。您最多可以搜索 n 个级别。祝你好运。

关于ruby-on-rails - Rails4 动态选择下拉菜单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38708428/

24 4 0