Ruby on rails RubyonRails-保留在编辑视图中选中的单选按钮

Ruby on rails RubyonRails-保留在编辑视图中选中的单选按钮,ruby-on-rails,ruby,Ruby On Rails,Ruby,我有一个表单要创建,还有一个表单要编辑我网站上的一些信息。在创建表单中,用户可以选择一些单选按钮,例如是或否,在我的数据库中,这些字段是布尔值true或false 在我的表单版本中,如何保留选定的单选按钮?当前,如果用户选择任何选项,则编辑视图不保存此信息,只显示空白单选按钮。 edit.html.erb <%= form_tag guide_dog_form_path(@guidedoguser), method: "put" do %> <%= radio_button

我有一个表单要创建,还有一个表单要编辑我网站上的一些信息。在创建表单中,用户可以选择一些单选按钮,例如是或否,在我的数据库中,这些字段是布尔值true或false

在我的表单版本中,如何保留选定的单选按钮?当前,如果用户选择任何选项,则编辑视图不保存此信息,只显示空白单选按钮。

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
如何在“是”或“否”单选按钮中显示这两个选项,并保留在“创建”上选择的选项


谢谢。

您不需要两个单独的表单。您可以只使用一个,并使用form_for代替form_标记。当您有一个a模型要操作时,您应该使用表单_进行操作。form_标签用于无支持模型的表单。同样,单选按钮标签是当您没有支持模型时,单选按钮是当您有支持模型时。既然你有一个模型,你应该走表单标签路线。我建议将这一点改为假设您的GuideDogForm模型上有“work”属性:

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

谢谢@bkimble。这应该适用于特定的Rails版本?我尝试了一个错误未定义的方法“单选按钮标签”。可能是什么?我使用Rails 4.1.5抱歉,我在原始帖子中有一个输入错误-它应该是f.radio_按钮。我更新了我的答案!你的第一段更新/更新栏不完全正确。由于update\u列直接在数据库中更新属性,因此大多数情况下首选使用update。跳过Rails验证和回调。看文档,你说得对。我在看AR::Base.update,它需要一个ID和散列。。修正我的答案。