2014-01-26 71 views
1

在ruby中選擇哪個數組有條件地遍歷的好方法是什麼?Ruby條件數組

如果條件爲真 - >使用數組1,如果不使用數組B.

我嘗試以下,但沒有奏效。

<% if @post.active ? %> 
     <% Post::A_OPTIONS.each do |option| %> 
    <%else %> 
     <% Post::B_OPTIONS.each do |option| %> 
    <%end%> 
     <br><%= radio_button_tag 'option', option, @option == option %> 
     <%= option.humanize %> 
    <% end %> 

回答

4

您應該將您的業務邏輯放入您的模型中。如

class Post 
    def options 
    active ? Post::A_OPTIONS : Post::B_OPTIONS 
    end 
end 

然後在視圖,

<% @post.options.each do |option| %> 
    <%= radio_button_tag 'option', option, @option == option %> 
    <%= option.humanize %> 
<% end %> 

在這種情況下,視圖是從如何生成的選項中分離,並且兩個選項邏輯視圖邏輯是簡單和clean

+1

正如你在'POST'類,你可以用簡化? A_OPTIONS:B_OPTIONS' – Spone

+1

你不應該需要'self'。 –

+0

@LeoCorrea已更新。 – fengd

1

這是怎麼回事?

<% (@post.active ? Post::A_OPTIONS : Post::B_OPTIONS).each do |option| %> 
    <br><%= radio_button_tag 'option', option, @option == option %> 
    <%= option.humanize %> 
<% end %> 
0

你如何在Post模型上定義一個方法來簡單地返回正確的選項?例如

class Post < ActiveRecord::Base 
    A_OPTIONS = [...]; 
    B_OPTIONS = [...]; 

    # other stuff 

    def options 
    if active 
     A_OPTIONS 
    else 
     B_OPTIONS 
    end 
    end 
end 

然後你的看法是會死人簡單:`self.active:

<% @post.options.each do |option| %> 
    <br><%= radio_button_tag 'option', option, @option == option %> 
    <%= option.humanize %> 
<% end %>