Ruby on rails 在rails中添加下拉列表并执行特定操作

Ruby on rails 在rails中添加下拉列表并执行特定操作,ruby-on-rails,ruby-on-rails-5,Ruby On Rails,Ruby On Rails 5,我是rails新手,这可能是一个基本问题。我在网上查了一下,但找不到一个简单的例子(可能是我的搜索不好) 我需要在我的视图中创建一个表单,并基于所选值和按钮单击操作,我需要在控制器中执行特定操作。我可以使用以下行在视图中创建下拉列表 = form_tag("/rtes", method: "get") do = label_tag(:q, "Get Trip Type:") = select_tag(:q, options_for_select({ "a" => "r4d_001",

我是rails新手,这可能是一个基本问题。我在网上查了一下,但找不到一个简单的例子(可能是我的搜索不好)

我需要在我的视图中创建一个表单,并基于所选值和按钮单击操作,我需要在控制器中执行特定操作。我可以使用以下行在视图中创建下拉列表

= form_tag("/rtes", method: "get") do
 = label_tag(:q, "Get Trip Type:")
 = select_tag(:q, options_for_select({ "a" => "r4d_001", "b" => "r4d_002" })
 <br>
 = button_to( "Get Trip", :action => "rtes", :controller =>:q)
=form_标记(“/rtes”,方法:“get”)do
=标签\标签(:q,“获取行程类型:”)
=选择标签(:q,用于选择的选项({“a”=>“r4d\U 001”,“b”=>“r4d\U 002”})

=按钮u(“获取跳闸”,“操作=>“rtes”,“控制器=>:q”)
其中rtes是我的控制器,我已将下拉值的值映射到单击按钮时需要执行的相应操作名称。这是我的控制器

class RtesController < ApplicationController
@@client=OptimusRtesServiceModel.new

def index
end


def r4d_001
  result = @@client.r4t_001()
  @driver_username = result.trip.loads[0].driver_details[0].driver_user_name
  @driver_password = result.trip.loads[0].driver_details[0].driver_password
  @trip_id = result.trip.trip_id
  @carrier_username = result.carrier_details.carrier_user_name
  @carrier_password = result.carrier_details.carrier_password
end

def r4d_002
  result = @@client.r4t_002()
  @driver_username = result.trip.loads[0].driver_details[0].driver_user_name
  @driver_password = result.trip.loads[0].driver_details[0].driver_password
  @trip_id = result.trip.trip_id
  @carrier_username = result.carrier_details.carrier_user_name
  @carrier_password = result.carrier_details.carrier_password
end
end
class RtesController

现在,如果选择下拉列表中的第一个选项并单击按钮,则“r4d_001”需要执行控制器中的操作。非常感谢您的帮助。

Rails与您尝试使用:q变量将选择值传递给按钮的操作不同。您可以创建一个下拉菜单,而不是使用“选择”字段将其发送到不同选项的不同操作。如果您想使用“选择fi”,仍然可以eld,那么您需要javascript来处理这里的前端任务。

我稍微修改了我的代码以使其正常工作。想法是使用rails参数并使用case/when在我的控制器中执行相应的操作

我的视图代码:

= form_tag({:controller=>"r4d", :action=>"result"}, method: :get) do
 = label_tag(:q, "Trip Type: ")
 = select_tag(:q, options_for_select({"a" => "1", "b" => "2"})
 = submit_tag("GetDetails")
我的控制器代码:

class R4dController < ApplicationController
@@client=ServiceModel.new
def r4d_result

 result = case params[:q]
 when "1"
   @@client.1
 when "2"
   @@client.2
 end

 @value = result.value
end

end
class R4dController

通过这种方式,我可以传递下拉列表中选定的值并执行相应的操作。

使用此代码,您现在得到了什么?问题到底在哪里?问题是,如果我运行页面并在下拉列表中选择一个选项,然后单击该按钮,则查询已发送,我的应用程序返回到我的主页并且没有调用相应的操作。我不确定如何修复这一行,调用相应的操作=>按钮(“Get Trip”,:action=>“rtes”,:controller=>:q)你能使用javascript吗?如何做到这一点。你能给我一些例子让我试试吗?这是我在这方面的第一个项目。你能给我一些链接来检查选择/下拉菜单选项以及如何实现它们吗?