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

时间:2018-04-25 11:41:37

标签: 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", "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”操作。非常感谢您的帮助。

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

我稍微修改了我的代码以使其正常工作。我的想法是使用rails params并使用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

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