我正在使用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会不会这样做?我试图使用它,但我没有基于查询的模型,我不知道如何创建一个(或者如果该方法实际上是可行的)。
感谢。
答案 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" %>
希望这有效。
注意:这只是您理解的示例代码。