首页 > 解决方案 > Rails - 从表单选择下拉列表中将参数传递给控制器

问题描述

我有 2 个模型:TeamQuest. 创建新团队时,我有一个所有任务的下拉列表。选择任务后,我想显示有关该任务的信息。

我的理解是表单中的所有内容都在客户端,并且需要 AJAX 将所选任务传递到服务器端。我的代码基于这个Stack Overflow 答案。

这是我构建表单的方式:

应用程序/视图/teams_form.html.erb

<%= form_for(@team) do |f| %>
  <fieldset>
    <ol>
      <li>
        <%= f.label :name %>
        <%= f.text_field :name %>
      </li>
      <li>
        <%= f.label :quest_id %>
        <%= f.select :quest_id, 
                     options_from_collection_for_select(@quests, :id, :name), 
                     {}, {remote: true, url: '/teams/new', method: 'get'} %>
      </li>
      <% if @x != nil && @x.id != nil %>
        <li><%= @x.id %></li>
      <% end %>
    </ol>
    <p>
      <%= f.submit %>
    </p>
  </fieldset>
<% end %>

应用程序/控制器/team_controller.rb

def new
  @team = Team.new
  @quests = Quest.all
  respond_to do |format|
    if params[:quest_id] != nil
      @x = Quest.find(params[:quest_id])
    end
    format.html #new.html.erb
    format.json
    format.js
  end
end

我的目标是将:quest_id参数从表单传递给@x变量并在表单中使用它。

这没有产生任何结果。我没有在控制器中获取参数,我不确定我错过了什么。

标签: javascriptruby-on-railsajax

解决方案


根据共享的描述,您似乎无法从下拉列表中获取所选项目的值。

下面提到的代码用于从下拉列表中选择值,您也可以使用浏览器的开发人员工具检查相同的值。

quest = $("#quest_id").val();

注意:假设选择器 id 是 quest_id,请根据您的表单进行更改。

现在,您可以使用下面提到的代码调用 ajax。

$.ajax({
  type: "GET",
  url: "/teams/new",
  data:{ quest_id: quest },
  dataType: "json",
  success:function(data){
    # logic for using ajax result
  }

希望能帮助到你!!


推荐阅读