我已通過「平坦化」在視圖中陣列和 重構控制器中的陣列解決了這個問題。
模型也需要進行一些更改,請參見下文。
class User < ActiveRecord::Base
serialize :favorite_colors, Array
def self.create_virtual_attributes (*args)
args.each do |method_name|
10.times do |key|
define_method "#{method_name}_#{key}" do
end
define_method "#{method_name}_#{key}=" do
end
end
end
end
create_virtual_attributes :favorite_colors
end
如果不這樣定義上述方法時,Rails會抱怨表單元素的 名字在視圖中,如「favorite_colors_0」(見下文)。
在視圖中,我動態創建10個文本字段,favorite_colors_0,favorite_colors_1等
<% 10.times do |key| %>
<%= form.label :favorite_color %>
<%= form.text_field "favorite_colors_#{key}", :value => @user.favorite_colors[key] %>
<% end %>
在控制器中,我必須合併favorite_colors_ *文本字段到一個數組前調用 節省或update_attributes方法:
unless params[:user].select{|k,v| k =~ /^favorite_colors_/}.empty?
params[:user][:favorite_colors] = params[:user].select{|k,v| k =~ /^favorite_colors_/}.values.reject{|v| v.empty?}
params[:user].reject! {|k,v| k=~ /^favorite_colors_/}
end
我正在做的一件事是硬編碼10,這限制了可以在favorite_colors數組中有多少元素。在表單中,它還輸出10個文本字段。我們可以很容易地改變10到100。但我們仍然會有一個限制。歡迎您提出如何消除此限制的建議。
希望你覺得這篇文章有用。
謝謝,但我的問題是關於如何在窗體中顯示此數組屬性以允許編輯此字段。 –
哦對不起 - 誤會了......即使我編輯了這個問題 - 我的錯 – awenkhh