Ruby on rails 轨道=>;从表单_中的选择中获取数据

Ruby on rails 轨道=>;从表单_中的选择中获取数据,ruby-on-rails,Ruby On Rails,在我的项目中,我使用的团队类型id取决于性别、年龄和分类;f、 e.第三支女性高级队的ID为3-2-1 创建新团队时,我需要这些信息在后台生成团队类型id。因此,我在一个选择字段中询问性别、年龄和分类,并尝试将这些信息传递到一个隐藏的_字段,在该字段中我生成如下ID: <%= form_for(@team) do |f| %> <%= select_tag(:gender_id, options_for_select([[I18n.t('basic.male'), 1],

在我的项目中,我使用的团队类型id取决于性别、年龄和分类;f、 e.第三支女性高级队的ID为3-2-1

创建新团队时,我需要这些信息在后台生成团队类型id。因此,我在一个选择字段中询问性别、年龄和分类,并尝试将这些信息传递到一个隐藏的_字段,在该字段中我生成如下ID:

<%= form_for(@team) do |f| %>
  <%= select_tag(:gender_id, options_for_select([[I18n.t('basic.male'), 1], [I18n.t('basic.female'), 2]], 1), {:class => 'select-style'}) %>
  <%= select_tag(:age_id... %>
  <%= select_tag(:class_id... %>
  <%= f.hidden_field :team_type_id, :value => :gender_id + :age_id + :class_id %>
  <%= f.submit %>
<% end %>

唯一的选择是通过javascript执行,因为html是静态的,当页面加载时,您无法知道用户将选择哪个选项,因此除非使用javascript,否则无法将这些值放在隐藏字段中

然而,在这种情况下,我建议处理数据服务器端,因为您必须始终意识到,您编写的javascript并不总是您将获得的javascript(用户可以在浏览器中更改javascript)

因此,我建议您在控制器中执行此操作

@team_type_id = params[:value] + "-" + params[:gender_id] + "-" + params[:age_id] + "-"+ params[:class_id]
但是我不建议使用定制的id。最好将team_type_id作为一个自动增量id,您可以使用类似team_type_的代码。因为你将如何区分两个具有相同id的团队

 @team_type_id = params[:value] + "-" + params[:gender_id] + "-" + params[:age_id] + "-"+ params[:class_id]
 @team = Team.new(params[:team])
 @team.team_type_id = @team_type_id
 @team.save

干杯

我假设
team\u type\u id
team
模型的字符串类型属性。您可以这样做:

def create
  team_type_id = [params[:gender_id],params[:age_id], params[:class_id]].join("-")
  @team = Team.create!(params[:team].merge(team_type_id: team_type_id))
end

为什么不将
选择标记
id传递给控制器并执行如下操作:
[params[:gender\u id]、params[:age\u id]、params[:class\u id]。在控制器中加入(“-”
?按照您尝试的方式,您必须使用jQuery/js在每个指定属性的选择上设置隐藏字段的值。您的意思是“团队类型id=[params[:gender\u id]、params[:age\u id]、params[:class\u id]].join”。但是如何在数据库中保存团队类型id?我的团队类型id与我的团队id是分开的。我用控制器的代码编辑了我的帖子。但这不起作用。是否可以将我的团队类型id保存到我的团队?团队类型id=params[:gender\u id]+params[:age\u id]+params[:class\u id]“团队=团队。新建(params[:team])团队。团队类型id=team\u type\u id”团队。在保存所有参数之前使用@保存(stackoverflow不允许我放置它们-。-尝试此操作哦,您可能需要访问类似团队类型id的参数[:value],team_params[:gender_id],因此我更喜欢这个答案,因为它较短,但Boltz0r解决方案也适用
def create
  team_type_id = [params[:gender_id],params[:age_id], params[:class_id]].join("-")
  @team = Team.create!(params[:team].merge(team_type_id: team_type_id))
end