2009-12-19 118 views
1

我有一个选择框Rails Web应用程序添加值选择框:从控制器功能(Ruby on Rails的)

<%= select_tag :foo %> 

我希望写这将填充的一个功能这个选择框有一些值。我需要编写什么代码才能做到这一点?

如果值被硬编码到函数中,那很好。

def populate 
    # what goes here? 
end 

回答

2

看看options_for_select。它为你想要显示的内容构建html。

options_for_select([["Dollar", "$"], ["Kroner", "DKK"]]) 
    <option value="$">Dollar</option>\n<option value="DKK">Kroner</option> 

    options_for_select([ "VISA", "MasterCard" ], "MasterCard") 
    <option>VISA</option>\n<option selected="selected">MasterCard</option> 

    options_for_select({ "Basic" => "$20", "Plus" => "$40" }, "$40") 
    <option value="$20">Basic</option>\n<option value="$40" selected="selected">Plus</option> 

    options_for_select([ "VISA", "MasterCard", "Discover" ], ["VISA", "Discover"]) 
    <option selected="selected">VISA</option>\n<option>MasterCard</option>\n<option selected="selected">Discover</option> 

你可以只通过这个函数的结果select_tag像这样:

<%= select_tag 'company_id', options_for_select(@current_user.active_companies.map { |c| [c.name, c.id] }) %> 
+0

谢谢!你将如何从控制器中调用它的函数返回options_for_select函数的结果,以便将其插入到选择框中? – Corey 2009-12-19 20:35:29

+0

编辑我的答案以显示如何调用。 – 2009-12-19 22:52:50

0

做像填充一个选择的帮手,最好做的事情。如果您的控制器被命名为MyController,那么您可以在助手目录中有一个MyHelper模块。助手内部的方法等将在您的视图模板中可用。因此,您可以在MyHelper中使用populate_select方法,并在控制器中执行所有您想要的操作。这更像是“Rails的方式”。 Helpers旨在处理模板需要的沉重的Ruby代码,因此您不必将其与XHTML混合使用。

+0

帮助程序里的代码是什么样的?它会和控制器内部一样吗? – Corey 2009-12-19 23:56:10

+0

是的,它会是一样的。关键是你想要将你的视图/表示逻辑与应用程序/业务逻辑分开。前者属于帮手,后者属于控制者。将助手想象成MVC中“V”的扩展。由于选择框和其他输入只出现在视图中,它们应该由视图帮助器准备。 – Chris 2009-12-20 16:25:08