Rails 单选按钮:根据模型/数据库条目设置默认值

Posted

技术标签:

【中文标题】Rails 单选按钮:根据模型/数据库条目设置默认值【英文标题】:Rails radio button: set default value based on model / database entry 【发布时间】:2014-05-10 05:51:37 【问题描述】:

我是 Rails 新手,一直在解决这个问题,但没有成功。我有一个表单供用户通过单选按钮提交多项选择问题的答案,我希望他们选择的答案在他们重新访问问题或重新加载页面时再次显示。他们的答案通过 TestQuestions 模型存储在数据库中的 answer_id 列中。以下代码检查了最后一个单选按钮而不是他们给定的答案,关于如何从数据库中将默认值作为答案的任何建议?

根据我下面的评论,我认为这可能需要 jQuery/javascript 来比较 html 中的输入值,即 -

<input id="answer_id_5" type="radio" value ="5" name="answer_id"></input> 

到数据库条目。

show.html.erb

<%= form_tag(controller: "test_questions", action: "update", method: "patch") do %>

  <% @test_question.question.answers.each do |answer| %>
    <li>
    <%= radio_button_tag "answer_id", answer.id, checked: @test_question.answer_id  %> # THE PROBLEM LINE 
        <%= answer.content %>
    </li>
  <% end %>
  <%= submit_tag "Next"  %>
<% end %>

test_questions_controller.rb

def show
  @test_question = @test_questions.find(params[:id])
end

【问题讨论】:

【参考方案1】:

你应该这样做:

<%= radio_button_tag "answer_id", answer.id, checked: @test_question.answer_id == answer.id %>

这个:

@test_question.answer_id == answer.id

将返回truefalse,从而选中或取消选中单选按钮。

@test_question.answer_id 返回一个 > 0 的整数,这是一个真实值,这意味着您正在检查所有单选按钮。由于只能选中一个单选按钮,因此它将是最后一个。

【讨论】:

太好了,这有助于我前进,谢谢米莎。现在的问题是代码将一个数据库值与另一个数据库值进行比较。 @test_question.answer_id == answer.id 如果用户正确回答了问题,则始终为真,因此“已检查”始终为真。如果他们回答错误,“检查”总是错误的。我将需要以某种方式访问​​输入单选按钮值。例如,从 获取值并将其与数据库进行比较。我不确定,但我认为这可能需要 jQuery/javascript。 如何存储正确答案?您的数据库中还有哪些其他字段。请将该信息添加到您的问题中,否则无法回答。 好的,所以我将布尔表达式 放在 radio_button_tag 上方以检查值,它返回正确的序列(假、真、假) 在这种情况下,所以代码应该可以工作,但按钮仍然没有被标记。这很奇怪。 好的,现在可以了。重新启动计算机。 是工作代码。谢谢米莎。

以上是关于Rails 单选按钮:根据模型/数据库条目设置默认值的主要内容,如果未能解决你的问题,请参考以下文章

如何在rails中正确使用单选按钮?

html中<radio>单选按钮控件标签用法解析及如何设置默认选中

simple_form_for rails 单选按钮内联

Rails 5 simple_form 将单选按钮标记为必需,如果未填写则阻止提交表单

AngularJS:根据ngModel未使用ngRepeat选择单选按钮

rails,simple_form,保存后如何使用所选选项更新单选按钮?