我正在寻找一个ruby on rails示例下拉列表,它将改变一堆输入字段。总之,我有三个人你可以......从下拉菜单中选择这个,对于这三个人中的每个人,他们每个人都有五个问题。
你知道我可以从中学到什么样的东西吗?
答案 0 :(得分:1)
以下是我设想它的方式。在您看来:
<%= select_tag :person_id,
options_from_collection_for_select(Person.all, "id", "name", person_to_prepopulate_select_with),
:id => "person_selector_for_questions" %>
这会创建您的下拉列表。我假设您有一个Person
模型,并且Person
has_many
Question
s。
在您的JavaScript中:
$("#person_selector_for_questions").change(function(e) {
var $dropdown = $(this);
$.get('/questions?person_id=' + $dropdown.val(), function(data) {
$dropdown.after(data);
});
});
当用户更改下拉列表的值时,(1)触发jQuery事件处理程序,(2)向http://yoursite/questions?person_id=selected_person_id
发出AJAX GET请求,并且(3)将其获取的响应粘贴到当前页面使用.after
跟进下拉列表。您当然可以自定义您的jQuery调用,将其放在您需要的页面中。
现在是重要的一部分。在QuestionsController
:
def index
if request.xhr? && params[:person_id]
@questions = Question.where(:person_id => params[:person_id]
render :person_questions
return # important to prevent rest of controller action from firing
end
end
这使index
动作处理其查询字符串中包含person_ids的AJAX调用。它将从对应于控制器的视图文件夹(在本例中为person_questions
文件夹)中激活部分名为questions
的部分,其中包含您想要粘贴到网页中的信息。
最后,您必须在_person_questions.html.erb
文件夹中创建此部分app/views/questions
。这部分将包含jQuery将在您的页面中粘贴的内容。例如,您可以将其置于部分:
<% @questions.each do |q| %>
<%= q.contents %>
<% end %>
因此,问题内容或您心中希望放在页面上的任何内容都会加载到当前页面中。