在rails中使用optgroup发出问题

时间:2014-06-23 06:31:00

标签: ruby-on-rails ruby ruby-on-rails-3

我有两组有条件(校长和其他)。 并且因为我做错了sintaxis而无法工作。

我的表

|invoice_cia|
  |id| |name|
    1    ABC
    2    DEF
    3    FGH
    4    IJK

我的控制器:

def index
  @cias = invoice_cia.find(:all,:conditions=>['id IN (1,2)'])
  @cias2 = invoice_cia.find(:all,:conditions=>['id NOT IN (1,2)'])
end

我的索引视图但由于我使用错误而无效:

<%= option_groups_from_collection_for_select(@cias.map{|t| t.name, t.id},@cias2.map{|t| t.name, t.id} )>

以下是演示:http://jsfiddle.net/9mpBw/

这是日志:

compile error
/home/master/proyects/test/app/views/invoice/index.html.erb:1: syntax error, unexpected '}', expecting tCOLON2 or '[' or '.'
...ct(@cias.map{|t| t.name, t.id},@cias2.map{|t| t.name, t.id} ...
                          ^
/home/master/proyects/test/app/views/invoice/index.html.erb:1: syntax error, unexpected '}', expecting tCOLON2 or '[' or '.'
...},@cias2.map{|t| t.name, t.id} )).to_s); @output_buffer.conc...
                           ^

请有人帮助我吗?

2 个答案:

答案 0 :(得分:1)

根据页面:

http://api.rubyonrails.org/classes/ActionView/Helpers/FormOptionsHelper.html#method-i-grouped_options_for_select

您希望在视图中找到以下内容:

<% grouped_options = {
        '1.Principals' => options_for_select(@cias.collect {|t| [t.name,t.id]}),
        '2.Others'       => options_for_select(@cias2.collect {|t| [t.name,t.id]}) } %>

<%= select_tag "cia",grouped_options_for_select(grouped_options)  %>

答案 1 :(得分:1)

昨天我准备了一个答案,但看来查理布朗已经帮你解决了这个问题。我只想谈谈他没有提到的一个问题。

您遇到的问题是由于错误消息指示语法不正确。通常在Ruby中,在没有歧义(意味着,显而易见)的情况下省略大括号和括号是可以接受的,但在所有其他情况下,必须包括它们。

在您的情况下,您似乎试图在map块中返回一个数组:

@cias.map{|t| t.name, t.id}

编译器不能假设你正在尝试做什么,所以它会抱怨。在这种情况下,您必须包括括号:

@cias.map{|t| [t.name, t.id] } # note the array brackets []