2014-01-21 142 views
0

多发性选择选择框我用4代表填写的图表,类似这些:与Ruby on Rails的

@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

这些变量是如何设置的? “@colors @types @fuels” – beck03076

+0

对于初始视图,它们具有来自它们各自模型的所有记录。所以那将是:“\ @colors = Color.all,@ \ types = Type.all,@ \ fuels = Fuel.all”。呃,对不起,我不知道如何逃脱@的,我不得不增加额外的字符,因为该网站认为我试图提及一个用户。 – user3209270

+0

你说,“将form_for做伎俩?我试图使用它,但我没有一个模型来查询的基础上,”类型,燃料和颜色是模型 – beck03076

回答

0

嗯,我不熟悉的轨道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" %> 

希望这个作品。

注:这只是一个示例代码,供您理解。

+0

谢谢。当我完成关联后,我会试试这个。 – user3209270

+0

我几乎可以按照自己的意愿来工作。这确实有用,但它是一个组合框。有没有办法让它成为一个列表框?这样你可以选择多个选项?我尝试在属性列表中添加“:multiple => true”,但这并没有做到这一点。 – user3209270

+0

我想通了,还有另一部分我不包括的参数。我觉得这就是。当我回到这里时,我会休息几个小时并更新。谢谢。 – user3209270

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

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

您可以创建一个单独的模型作为一个Ruby类来处理这个,如果你愿意的话,但只有当你发现其他车型过于局促。希望帮助