gpt4 book ai didi

ruby-on-rails - fields_for 在验证错误时重置

转载 作者:行者123 更新时间:2023-12-02 00:04:09 25 4
gpt4 key购买 nike

我在 SO 上看到过几个类似的问题,但它们没有完全涵盖我的问题。

我有一个带有嵌套字段的非常基本的表单,问题是,当这些嵌套表单中出现任何验证错误时,所有 fields_for 字段都将重置为其原始值。

我已经准备了一个示例 super 简单的应用程序来向您展示问题,它的代码在这里可用:https://github.com/mbajur/wicked-form-reset-example

作为预览,这里是 Controller 和 View 代码:

用户 Controller .rb

class UsersController < ActionController::Base
def edit
@user = User.find(params[:id])
end

def update
@user = User.find(params[:id])

respond_to do |format|
if @user.update_attributes(params["user"])
format.html { redirect_to edit_user_path(@user), notice: 'User saved.' }
else
format.html { render action: :edit }
end
end
end
end

用户/edit.html.erb

<%= form_for @user do |f| %>

<% # ..... %>

<h3>Assets</h3>

<%= f.fields_for :assets, f.object.assets.first_type do |ff| %>
<%= ff.hidden_field :asset_type %>
<%= ff.label :value, 'Asset value:' %>
<br>
<%= ff.text_field :value %>
<% end %>

<% # ..... %>

<hr>

<%= f.submit %>

<% end %>

你能给我一些关于如何处理的建议吗?

最佳答案

所以,引用你在github上提供的模型代码:

class Asset < ActiveRecord::Base
belongs_to :user
attr_accessible :asset_type, :value

scope :first_type, -> { where( asset_type: 1 ) }
scope :second_type, -> { where( asset_type: 2 ) }
scope :third_type, -> { where( asset_type: 3 ) }

validates :value, presence: true, numericality: { only_integer: true }
end

以及您使用的 View :

  <%= f.fields_for :assets, f.object.assets.first_type do |ff| %>
<%= ff.hidden_field :asset_type %>

<%= ff.label :value, 'Asset value:' %>
<br>
<%= ff.text_field :value %>
<% end %>

<br><br>

<%= f.fields_for :assets, f.object.assets.second_type do |ff| %>
<%= ff.hidden_field :asset_type %>

<%= ff.label :value, 'Asset value:' %>
<br>
<%= ff.text_field :value %>
<% end %>

<br><br>

<%= f.fields_for :assets, f.object.assets.third_type do |ff| %>
<%= ff.hidden_field :asset_type %>

<%= ff.label :value, 'Asset value:' %>
<br>
<%= ff.text_field :value %>
<% end %>

很明显...您使用作用域来引用数据。这些将触发数据库查询以选择由于验证错误而未保留的数据。太棒了!

所以如果你想处理仍在模型中的数据,你必须使用关联!

关于ruby-on-rails - fields_for 在验证错误时重置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19491291/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com