【发布时间】:2021-04-16 00:03:01
【问题描述】:
我想显示 InvestorTypes 的列表(作为单选按钮),但在每种类型之前我应该能够添加该类型的说明。这是我所拥有的:
<%= simple_form_for(resource, as: resource_name, url: users_user_experience_level_path(resource_name), html: { method: :put }) do |f| %>
<div class="form-inputs">
<% User::USER_EXPERIENCE_LEVEL.each do |level| %>
<b>Investor type <%= level %></b>
<%= t("user.description.#{level}") %>
<%= f.input :experience_level, collection: [level], as: :radio_buttons, label: false %>
<% end %>
</div>
<div class="form-actions">
<%= f.button :submit, 'Submit' %>
</div>
<% end %>
这给了我预期的看法:
Investor type Beginner
Some explanation of what is going on
[checkobox] type Beginner
Investor type Expert
Some clarification of who is an expert and what ever you want to display here
[checkbox] type Expert
Investor type Institutional
Some clarification of who is an institutional client and some legal stuff
[checkbox] type Institutional
但是当按下提交按钮时,它不会将输入值(用户选择的单选框选择)传递给参数:
=> #<ActionController::Parameters {"experience_level"=>""} permitted: true>
[编辑]
class User < ApplicationRecord
USER_EXPERIENCE_LEVEL = %w[institutional beginner expert].freeze
end
【问题讨论】:
-
我敢打赌,如果您单击最后一个单选按钮,它就会起作用。现在我认为问题是您正在创建一堆同名的单选按钮,并且它按名称自上而下组合它们,因此最后一个框获胜。通常单选框会创建为
<%= f.input :experience_level, collection: User::USER_EXPERIENCE_LEVEL, as: :radio_buttons, label: false %>,而不是您现在使用的循环。 -
@engineersmnky 你是对的,如果我选择最后一个就可以了。我知道标准方法是什么,但如果我使用它,每次初始迭代后我都会有 3 个输入。你知道如何解决它吗?
标签: ruby-on-rails