【问题标题】:Rails form_tag not displaying the existing field valueRails form_tag 不显示现有字段值
【发布时间】:2016-07-30 20:38:47
【问题描述】:

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

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

索引动作在相关路径中有一个视图文件,其代码如下:

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

现在,我可以在相关模型中保存/更新这些字段数据,并且可以通过 rails 控制台中的命令Setting.all 查看数据。但问题是,在我重新加载设置索引页面时通过表单保存记录后,表单为空白,并且未在字段中显示以前保存的值。

我在这里做错了什么?

【问题讨论】:

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


    【解决方案1】:

    您可以执行上一个答案中提到的操作,即使用 form_for。但是,这也可以通过在创建和处理此表单的控制器操作中创建一个 Hash 来实现。

    在创建此表单的操作中,哈希中的值可以根据输入标签初始化为空白/零,并且在处理此表单的操作中,哈希中的值可以分配给从发布的参数 []。

    我遇到了与 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 %>
    

    希望这会有所帮助。

    【讨论】:

    • 我发现这非常有用,因为它回答了 OP 的实际问题,即如何将值专门保存在 form_tag 中。谢谢。
    【解决方案2】:

    我认为您需要使用 form_for(@variable) 而不仅仅是 form_tag,因为您需要在保存后持久化对象。

    form_for 与资源一起使用,请看这里:http://api.rubyonrails.org/classes/ActionView/Helpers/FormHelper.html

    【讨论】:

    • 我们不能使用 form_tag 帮助器使值在字段中持久化。其次,我尝试将 form_for 助手与 @setting 变量一起使用,但它显示“表单中的第一个参数不能包含 nil 或为空”。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多