Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Rails使用ajax操作选择标签(Rails 3和jQuery)_Ruby On Rails_Ruby On Rails 3 - Fatal编程技术网

Ruby on rails Rails使用ajax操作选择标签(Rails 3和jQuery)

Ruby on rails Rails使用ajax操作选择标签(Rails 3和jQuery),ruby-on-rails,ruby-on-rails-3,Ruby On Rails,Ruby On Rails 3,我有下面的选择列表 <%= select_tag "project_id", options_from_collection_for_select(@projects, "id", "title") %> 当用户从上面的列表中选择一个选项时,应根据上面的选择使用数据库中的值填充下面的列表 <%= select_tag "version_id", options_from_collection_for_select(??project.versions??, "id", "

我有下面的选择列表

<%= select_tag "project_id", options_from_collection_for_select(@projects, "id", "title") %>

当用户从上面的列表中选择一个选项时,应根据上面的选择使用数据库中的值填充下面的列表

<%= select_tag "version_id", options_from_collection_for_select(??project.versions??, "id", "title") %>

我认为我应该使用onchange事件,但我不知道如何使用它。 谁来帮帮我。
谢谢

Javascript

function update_versions_div(project_id) {  
  jQuery.ajax({
    url: "/update_versions",
    type: "GET",
    data: {"project_id" : project_id},
    dataType: "html"
    success: function(data) {
      jQuery("#versionsDiv").html(data);
    }
  });
}
控制器

def edit
  @projects = Project.all
  @versions = Version.all
end

def update_versions
  @versions = Version.where(project_id => params[:project_id]).all
  render :partial => "versions", :object => @versions
end
查看

<%= select_tag "project_id", options_from_collection_for_select(@projects, "id", "title"), :prompt => "Select a project", :onchange => "update_versions_div(this.value)" %>
<div id="versionsDiv">
  <%= render :partial => 'versions', :object => @versions %>
</div>
在这里,您应该用控制器的名称替换

我还没有测试代码,所以可能有错误

更新


PullMonkey用Rails 3示例更新了代码,这明显优于此代码。也请结帐

看看我写的关于rails 3的@rubyprince(!!)。Rails 3oh中不存在远程_函数。很抱歉,在这种情况下,您可以用jQuery中的某个内容替换onchange函数…我将用它发布一个答案…在安全性和活动记录处理方面对此进行了一些改进:
@versions=Version.where('project_id=?',params[:project_id]).first
where子句当前存在安全漏洞。直接放入字符串可能会使查询对恶意内容开放。此外,它目前正在获取ActiveRecord:Relation,而不是对象本身。因此,添加第一个方法将解决此问题。Hi@JellyFishBoy..这里有两件事:-
Version.where(project\u id=>params[:project\u id])
-据我所知,这个
where
子句没有留下安全漏洞。我不是直接放入字符串,而是传递一个散列。这是Rails中编写条件的惯用方法。如果我们将其作为散列提供,Rails将进行安全处理。请参阅@JellyFishBoy..关于
.first
,我的目的不是获取第一条记录,而是获取所有记录,以及项目id。您可以说,它返回一个activerecord关系,它将立即启动查询,但是像
这样的方法检查
后,这个activerecord关系将立即启动查询,
每一个
都被调用。因此,代码可以工作,但我同意最好是显式调用。我要补充一点。
<%= select_tag "version_id", options_from_collection_for_select(versions, "id", "title"), :prompt => "Select a version" %>
match "/update_versions" => "<controller>#update_versions"