如何使用simple_form_for在视图中动态生成单选按钮?

时间:2014-05-25 18:25:58

标签: ruby-on-rails ruby ruby-on-rails-4 simple-form

我想从simple_form中的一系列选项生成一个单选按钮列表。用户选择的任何选项都将作为该特定字段的数据发送。 options数组可以是一个简单的数组或一个哈希数组,它并不重要。此外,我需要一些确保选择当前值的能力。什么是最好的方法呢?

2 个答案:

答案 0 :(得分:0)

只需在控制器中声明另一个实例变量并在视图中使用它吗?

在控制器动作中:

def whatever_action
  @user = # whatever
  @options = # however you get the options
end

然后是以下形式:

<%= f.collection_radio_buttons :options, @options, :first, :last %>

答案 1 :(得分:0)

IMO这个选项数组最好位于辅助方法中,但是对于每个自己的方法。

在这种情况下,您可以利用OpenStruct,它会为您提供干净的访问者,因此您不必询问......是我的密钥符号还是字符串?

然后你可以使用simple_form的label_method / value_method选项。

in Helper

# at top of helper module
require 'ostruct' 
module ApplicationHelper # (or whatever helper you want)
...

  # passed as an array of hashes, each hash composed of {id: __, value: "blah"}
  def dynamic_options(initial_values = [])
    initial_values.each do |hash_item|
      OpenStruct.new(hash_item)
    end
  end

...
end

然后在视野中

f.collection_radio_buttons :options, collection: dynamic_options, :id, :value