Rails 4 Dynamic生成Hstore密钥并自动将其添加到白名单中

时间:2014-05-22 03:34:30

标签: ruby-on-rails ruby-on-rails-4 strong-parameters hstore

我在UrlCommand模型中有一个cgi_attributes 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模型中?

1 个答案:

答案 0 :(得分: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