我的视图中有一个类似这样的选择列表
<select class="sel_list_size" id="product", onchange="build_url('dynamic_div')">
<%= options_for_select(get_product) %>
</select>
我有一个控制器方法,它将根据所选值运行命令。
def get_inner_dir_of_products(product)
cmd = `curl #{@base_url[0]}/#{product}/`
result = JSON.parse(cmd)
@inner_dirs = []
result.each_with_index do |element, _index|
@inner_dirs.append([element['name'], _index + 1])
end
@inner_dirs
end
我有一个JavaScript可以调用该方法。
function build_url(div_var) {
var selected_index = product.selectedIndex;
var selected_value = product.options[product.selectedIndex].text;
var selSpan = document.createElement('span');
$.ajax({
url: '/get_inner_dir_of_products',
type: 'GET',
data: { selected_value }
})
// code to build a select list goes here
}
我知道这个ajax调用将无法工作。如何从视图中调用控制器方法?
答案 0 :(得分:0)
在您的routes.db
文件中,您需要将要从javascript访问的路径连接到控制器方法:
get '/get_inner_dir_of_products' => 'youramazingcontroller#get_inner_dir_of_products'
现在,当您在/get_inner_dir_of_products
处对服务器进行调用时,Rails知道会将其发送到控制器的get_inner_dir_of_products方法。
get_inner_dir_of_products
方法可以使用params
对象访问传递给该方法的参数。
@some_value = params[:somevalue]
您可以在javascript中设置参数的名称:
$.ajax({
url: '/get_inner_dir_of_products',
type: 'GET',
data: { somevalue: selected_value },
// etc.
})