【问题标题】:adding values to a select box from a controller function (Ruby on Rails)从控制器函数向选择框添加值(Ruby on Rails)
【发布时间】:2010-12-28 09:19:00
【问题描述】:

我有一个带有选择框的 Rails Web 应用程序:

<%= select_tag :foo %>

我希望在控制器中编写一个函数,该函数将使用一些值填充此选择框。我需要编写什么代码才能做到这一点?

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

def populate
  # what goes here?
end

【问题讨论】:

    标签: javascript ruby-on-rails ruby ajax model-view-controller


    【解决方案1】:

    看看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] }) %>
    

    【讨论】:

    • 谢谢!您将如何从将在控制器中调用它的函数返回 options_for_select 函数的结果,以便将其插入选择框?
    【解决方案2】:

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

    【讨论】:

    • 帮助程序中的代码是什么样的?它会和它在控制器内部一样吗?
    • 是的,应该是一样的。关键是您希望将视图/表示逻辑与应用程序/业务逻辑分开。前者属于助手,后者属于控制器。将助手视为 MVC 中“V”的扩展。由于选择框和其他输入只出现在视图中,它们应该由视图助手准备。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-21
    • 1970-01-01
    • 2011-05-24
    • 1970-01-01
    • 2010-12-21
    • 1970-01-01
    相关资源
    最近更新 更多