首页 > 解决方案 > 在 Rails 中添加下拉菜单并执行特定操作

问题描述

我是 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)

其中 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

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

标签: ruby-on-railsruby-on-rails-5

解决方案


我稍微修改了我的代码以使其工作。这个想法是使用 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

通过这种方式,我能够传递下拉列表的选定值并执行相应的事情。


推荐阅读