我有一个要创建的表单和一个要编辑我站点上某些信息的表单。在创建表单中,用户可以选择一些单选按钮,例如“是”或“否”,在我的数据库中,这些字段为Boolean
(是或否)。
在我的表单版本中,如何保存所选的单选按钮?当前,如果用户选择任何选项,则编辑视图不会保留此信息,而仅显示空白单选按钮。
edit.html.erb
<%= form_tag guide_dog_form_path(@guidedoguser), method: "put" do %>
<%= radio_button_tag :work, @guidedoguser.work %>
<% end %>
controller.rb
class GuideDogFormsController < ApplicationController
def create
@contact = GuideDogForm.new(params[:contact])
if @contact.save
GuideDogMailer.delay_for(10.seconds, retry: true).create(@contact)
render nothing: true, status: 200
else
render nothing: true, status: 400
end
end
def edit
@guidedoguser = GuideDogForm.where(rg: params[:rg]).first
end
def update
@guidedoguser = GuideDogForm.where(rg: params[:rg]).first
if @guidedoguser.update(work: params[:work])
redirect_to guide_dog_form_path(@guidedoguser)
else
render 'edit'
end
end
end
如何显示单选按钮中的两个选项(是或否)并保留在创建时选择的选项?
谢谢。
答案 0 :(得分:1)
您不需要两个单独的表格。您可以只用一个,并使用form_for(https://api.rubyonrails.org/v5.1/classes/ActionView/Helpers/FormHelper.html)而不是form_tag来完成。当您要使用模型进行操作时,应使用form_for。 form_tag用于不支持模型的表单。同样,radio_button_tag是您没有后备模型时,而radio_button(https://apidock.com/rails/ActionView/Helpers/FormHelper/radio_button)是您没有后备模型时。既然有模型,就应该走form_tag路线。我建议将其更改为(假设您在GuideDogForm模型上具有“工作”属性):
edit.html.erb(您可以将其复制并粘贴到new.html.erb中,并且应该可以像新记录那样工作)
<%= form_for @guidedoguser do do |f| %>
<%= f.radio_button :work %>
<% end %>
控制器:
class GuideDogFormsController < ApplicationController
def new
@guidedoguser = GuideDogForm.new
end
def create
@guidedoguser = GuideDogForm.new(guide_dog_params)
if @guidedoguser.save
GuideDogMailer.delay_for(10.seconds, retry: true).create(@guidedoguser)
render nothing: true, status: 200
else
render nothing: true, status: 400
end
end
def edit
@guidedoguser = GuideDogForm.where(rg: params[:rg]).first
end
def update
@guidedoguser = GuideDogForm.where(rg: params[:rg]).first
if @guidedoguser.update_attributes(guide_dog_params)
redirect_to guide_dog_form_path(@guidedoguser)
else
render 'edit'
end
end
private
def guide_dog_params
# note if you have more fields you want to persist in your model from your form, you will
# need to add them here after :work
params.require(:guide_dog_form).permit(:work)
end
end