新手问题 form_for 数组问题

dreamable · 2013年01月15日 · 最后由 dreamable 回复于 2013年01月15日 · 2158 次阅读

我有一个类 MultipleChoice,有 4-5 个 options. options 是一个 String Array,在 DB 中是存储在一起的:“#opt1#opt2#opt3#opt4....”. 我在 Model 中实现了 options 的 reader 和 setter.

但是不知道如何在 form_for 表格中对 options 赋值。我先是使用 <%f.text_area :options%> 但是这样用户需要输入字符串"#opt1#opt2...",而我想要的是提供给用户四个单独的输入框,内部存储格式对用户是透明的。

现在的方法是实现了 opt1 opt2 opt3 opt4 函数的 reader 和 setter,form_for 中使用 <%f.text_area :opt1 %> <%f.text_area :opt2 %> <%f.text_area :opt3 %> <%f.text_area :opt4 %>

这样可以用,但是代码很烂。我查找了 form_for 和 fields_for 的说明,也没有什么好办法。不知道大家有什么好办法。有没有办法让用户输入单独的“opt1”,..."opt4",而表单自动将之转成字符串数组,通过 options=函数赋值?

DB 层没法改,因为 MultipleChoice 是一个子类,和父类共享一个表格。

找到一个方法,使用 text_area_tag 可以: <% @exercise.options.each do |opt| %> <%= text_area_tag "multiple_choice[options][]", opt %> <% end %>

f.text_area 也能用,只是要更改默认设置

<% @exercise.options.each do |opt| %> <%= f.text_area "options", :name => "multiple_choice[options][]", :value => opt, :size=>"40x2" %> <% end %>

需要 登录 后方可回复, 如果你还没有账号请 注册新账号