我刚刚发现了rails-settings gem,现在我需要创建一个管理页面,让我可以编辑设置值。如何使用可以更改这些动态应用程序范围设置的编辑视图创建设置控制器?
答案 0 :(得分:5)
我没有使用过这个宝石,但它似乎应该相当直接。由于它使用数据库支持的模型,您只需创建一个正常的控制器:
rails g controller Settings
从这里开始,您将定义索引操作以收集您在视图中显示的所有个人设置:
def index
@settings = Settings.all
end
然后在视图中,您可以设置一个循环来显示它们:
<% @settings.each do |setting| %>
<%= setting.var %> = <%= setting.value %>
<% end %>
至于编辑......这可能有点棘手,因为默认情况下,rails会指望您一次只提交一个设置进行编辑。你可以这样做,但除非用ajax实现编辑,否则它可能是乏味且不直观的。
另一种方法是将更新方法设置为一次接受所有单个设置,循环并使用新值更新每个设置。它可能看起来像这样:
// The /settings route would need to be setup manually since it is without an id (the default)
<%= form_tag("/settings", :method => "put") do %>
<% @settings.each do |setting| %>
<%= label_tag(setting.var, setting.var) %>
<%= text_field_tag(setting.var, :value => setting.value) %>
<% end %>
<%= submit_tag("Save Changes") %>
<% end %>
这应输出所有设置(假设它们已分配给@settings变量),var名称作为标签,当前值作为文本字段值。假设设置了路由,当您提交此表单时,接收它的操作应该是params变量中的所有新设置。然后你可以在动作中做这样的事情:
def update
params.each_pair do |setting, value|
eval("Settings.#{setting} = #{value}")
end
redirect_to settings_path, :notice => 'Settings updated' # Redirect to the settings index
end
这可能不是最好的方式,具体取决于您编辑设置的频率和您拥有的设置数量......但这是一种可能的解决方案。
答案 1 :(得分:2)
我正在为此寻找一些建议,并找到了另一个非常简单和优雅的答案,对于后来寻找这个问题的人来说。它只是在您的模型中设置动态访问器,允许您的表单具有与普通属性类似的设置字段。一个例子可以在原始答案中找到: