Rails form_tag不显示现有字段值

时间:2016-07-30 20:38:47

标签: ruby-on-rails forms ruby-on-rails-4

我有一个像这样的设置控制器设置:

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 %> 查看数据。但问题是,在我重新加载设置索引页面后通过表单保存记录后,表单为空白,并且没有在字段中显示以前保存的值。

我在这里做错了什么?

2 个答案:

答案 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 %>

希望这有帮助。