使用Ruby on Rails选择多个选择框

时间:2014-01-21 07:37:54

标签: ruby-on-rails ruby-on-rails-4

我正在使用4个表来填充图表,类似于:

@colors             @types                  @fuels
-----------------   ---------------------   -------------------
| ID |  Color   |   | ID |     Type     |   | ID |    Fuel    |
-----------------   ---------------------   -------------------
| 1  | 'Red'    |   | 1  | 'SUV'        |   | 1  | 'Gasoline' |
| 2  | 'Green'  |   | 2  | 'Truck'      |   | 2  | 'Diesel'   |
| 3  | 'Blue'   |   | 3  | 'Sports Car' |   | 3  | 'Electric' |
| 4  | 'Yellow' |   | 4  | 'Compact'    |   | 4  | 'Hybrid'   |
-----------------   ---------------------   -------------------

最后一张表是一张订单表,类似于:

@orders
--------------------------------------------------------
| order_id | color_id | type_id | fueld_id | purchases |
--------------------------------------------------------
|    1     |    2     |    1    |    4     |     2     |
|    2     |    1     |    4    |    1     |     4     |
|    3     |    2     |    2    |    2     |     6     |
|    4     |    4     |    1    |    4     |     2     |
|    5     |    1     |    4    |    2     |     1     |
|    6     |    3     |    3    |    3     |     1     |
|    7     |    3     |    3    |    3     |     2     |
|    8     |    2     |    1    |    1     |     2     |
--------------------------------------------------------

我有一个控制器,可以轮询所有数据来制作图表。到现在为止还挺好。现在,我想让用户从每个表中选择一个或多个属性,以创建动态订单页面。

我的方法是显示3个允许用户进行选择的选择框(列表框),并且基于此,将修改@orders表。修改将采取不同的行动,比如说:

def newtable
    ...
end

我知道如何通过SQL执行此操作,但我不太确定如何使用RoR正确显示这些列表框。我的想法是选择每个表中的一个,几个或所有元素。

form_for会不会这样做?我试图使用它,但我没有基于查询的模型,我不知道如何创建一个(或者如果该方法实际上是可行的)。

感谢。

2 个答案:

答案 0 :(得分:0)

<%= f.select(:color, @color.collect {|p| [ p.name, p.id ] }, 
                                       { :prompt => "Please select"}, 
                                       { :multiple => true, :size => 4 }) %>

要将控制器配置为接受多个参数:Click Me

如果您愿意,可以创建一个单独的模型作为ruby类来处理此问题,但前提是您发现其他模型过于局促。希望有所帮助

答案 1 :(得分:0)

我还不熟悉Rails 4,但我可以根据Rails 3提供答案。

首先制作必要的关联

并在您的订单控制器中定义一个新方法,如

def create
----your stuff---
end

在您的订购表单页面

<%= form_tag :action => 'create' %>

<%= collection_select :order,:color_id, @colors,'id','Color',{:label=> 'Select a Color',:prompt=> 'Select'} %>

<%= collection_select :order,:type_id, @types,'id','Type',{:label=> 'Select a Type',:prompt=> 'Select'} %>

<%= collection_select :order,:fuel_id, @fuels,'id','Fuel',{:label=> 'Select a Fuel',:prompt=> 'Select'} %>

<%= submit_tag "Create" %>

希望这有效。

注意:这只是您理解的示例代码。