gpt4 book ai didi

ruby-on-rails - 在 Rails 4 中进行验证之前保存参数中的数据

转载 作者:行者123 更新时间:2023-12-04 19:56:54 27 4
gpt4 key购买 nike

我有一个带有隐藏字段的表单,它从参数中获取值。当我第一次进入表单页面时,我的 url 看起来像这样:

http://localhost:3000/requests/new?parent_request_id=1&patient_id=1

所以我有 parent_request_id 和 patient_id 参数。我的 hidden_​​fields 得到这些值。

当用户提交表单时,如果验证未通过,用户将返回到带有错误消息的同一页面。问题是 url 中的那些参数消失了,因此隐藏字段为空。

如何保存这些参数。或者是否有更好的方法在 View 之间发送变量?

编辑:我的 Controller 代码:

# requests_controller.rb 
# POST /requests
# POST /requests.json
def create
@request = Request.new(request_params)
respond_to do |format|
if @request.save
format.html { redirect_to @request, notice: 'Request was successfully created.' }
format.json { render :show, status: :created, location: @request }
else
format.html { render :new }
format.json { render json: @request.errors, status: :unprocessable_entity }
end
end
end


private

# Never trust parameters from the scary internet, only allow the white list through.
def request_params
params.require(:request).permit(:description, :diagnos, :payed, :price, :doctor_id, :patient_id, :parent_request_id)
end

和我的表格:

<div class="form">
<h1>Данные по обращению</h1>
<%= form_for(@request) do |f| %>
<%= render 'layouts/error_messages', object: @request %>

<%= f.hidden_field :parent_request_id, value: params[:parent_request_id] %>
<%= f.hidden_field :patient_id, value: params[:patient_id] %>

<% if can? :manage, :all %>
<div class="field">
<%= f.label 'Лечащий врач' %>
<%= f.collection_select(:doctor_id, User.where(role:'doctor'),:id,:name,{include_blank:'-не выбрано-'}, class:'select2') %>
</div><br>
<% end %>

<div class="field">
<%= f.label 'Описание' %><br>
<%= f.text_field :description %>
</div>
<div class="field">
<%= f.label 'Первичный диагноз' %><br>
<%= f.text_field :diagnos %>
</div>
<div class="field">
<%= f.label 'Стоимость' %><br>
<%= f.number_field :price %>
</div>
<div class="actions">
<%= f.submit 'Добавить данные', class:'button tiny' %>
</div>
<% end %>
</div>

最佳答案

如果你在你的 Controller 中这样做

class RequestsController
def new
@request = Request.new(parent_request_id: params[:parent_request_id],
patient_id: params[:patient_id])
end

def create
@request = Request.new(request_params)
respond_to do |format|
if @request.save
format.html { redirect_to @request, notice: 'Request was successfully created.' }
format.json { render :show, status: :created, location: @request }
else
format.html { render :new }
format.json { render json: @request.errors, status: :unprocessable_entity }
end
end
end

end

让你的观点变得简单

<%= form_for(@request) do |f| %>
<%= render 'layouts/error_messages', object: @request %>

<%= f.hidden_field :parent_request_id %>
<%= f.hidden_field :patient_id %>
<% end %>

您将在新操作中将属性绑定(bind)到请求对象,因此如果验证失败它们将存在并且不会设置为 nil 的参数。

关于ruby-on-rails - 在 Rails 4 中进行验证之前保存参数中的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32138242/

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