2014-05-22 27 views
1

我在UrlCommand模型中有cgi_attributes hstore类型的列。Rails 4动态生成Hstore密钥并自动将其添加到白名单

class UrlCommand < ActiveRecord::Base 
    store_accessor :cgi_attributes, :name, :range, :security, :default_value 
end 

但是,cgi_attributes中的密钥应该由用户动态添加。

而且我也想呈现每个关键在我的方式提交

而非硬代码输入列

- [:name, :range, :security].each do | column | 
    = render :partial => 'attributes' , :locals => { f: f, column: column } 

而且还需要添加这些动态生成的密钥可以更新成我的模型。

def url_command_params 
    params.require(:url_command).permit(:model_name, :firmware_version, :cgi_attributes, 
             :cgi_name,:name, :range, :security) 

end 

现在,我所有的代码都是基于硬编码,如何使按键和可以由用户动态地增值,并存储到UrlCommand模式?

+0

的可能的复制http://stackoverflow.com/questions/17348703/rails-4-strong-params-dynamic-hstore-keys – Monideep

+0

@deep它没有提到如何通过ActiveRecord访问这些密钥。 – newBike

+0

我有同样的问题。 store_accessor需要动态更改,以及如何显示/保存此类hstore数据 – parzival

回答

0

也许你可以创建属性名称(CustomAttributes)一个单独的表,然后创建一个循环,与store_accessor像这增加了他们:

CustomAttributes.all.each do |attribute| 
    store_accessor :cgi_attributes attribute.name 
end 

我想你可以做一些类似强参数的东西。我没有尝试过我的自我,因为我很努力让hstore在我的应用程序中工作。但我将有相同的用户情况/问题需要解决。所以我会测试它,并改变我的答案,一旦我得到它的工作和确认。

有点像它在这个railscast解释说: http://railscasts.com/episodes/403-dynamic-forms