我有一个像这样的设置控制器设置:
classpath
索引操作在相关路径中有一个视图文件,其代码如下:
class Admin::SettingsController < ApplicationController
def index
@settings = Setting.all
end
def update
setting_params.each do |key, value|
Setting.where(key: key).first.update_attribute :value, value
end
redirect_to admin_settings_path, notice: "Settings saved."
end
private
def setting_params
params.require(:settings).permit(:site_title, :site_desc)
end
end
现在,我可以在相关模型中保存/更新这些字段数据,我可以通过rails控制台中的命令<h1>Settings</h1>
<%= form_tag admin_settings_path, method: "put" do %>
<p>
<label>Site Title:</label>
<%= text_field_tag "settings[site_title]" %>
</p>
<p>
<label>Site Description:</label>
<%= text_field_tag "settings[site_desc]" %>
</p>
<p>
<%= submit_tag "Save settings" %>
</p>
<% end %>
查看数据。但问题是,在我重新加载设置索引页面后通过表单保存记录后,表单为空白,并且没有在字段中显示以前保存的值。
我在这里做错了什么?
答案 0 :(得分:0)
我认为您需要使用form_for(@variable)
而不仅仅是form_tag,因为您需要在保存后保留对象。
form_for使用资源,请看一下:http://api.rubyonrails.org/classes/ActionView/Helpers/FormHelper.html
答案 1 :(得分:0)
您可以执行上一个答案中提到的内容,即使用form_for。但是,这也可以通过在创建和处理此表单的控制器操作中创建哈希来实现。
在创建此表单的操作中,散列中的值可以初始化为空白/零,具体取决于输入标记,并且在处理此表单的操作中,散列中的值可以分配给从张贴的参数[]。
我遇到与 form_tag 类似的问题,我在索引操作中使用了以下代码,即最初呈现表单的操作:
@search = {name: "", ranking_group: 0}
然而,在搜索操作中,我使用以下代码填充此哈希:
@search = {name: params[:name], ranking_group: params[:ranking_group]}
最后,在视图中,我使用了适当的默认值选项和输入标记,如下所示:
<%= text_field_tag :name, @search[:name] %>
<%= select_tag :ranking_group, options_for_select(AmenityEntities::Amenity.ranking_group_options, @search[:ranking_group]), include_blank: true %>
希望这有帮助。