我建立了这种表格,生成了一些带有“ U6”,“ U8” eccc之类值的chebox
<%= form.label "Seleziona Categorie" %>
<% TeamCategory::NAMES.each do |category| %>
<%= check_box_tag 'categories_selected[]', category -%>
<% end %>
现在,我必须将selected check_box的值传递给模型中的方法。 现在是:
def create_tournament_team_categories
TeamCategory::NAMES.each do |name|
team_category = TeamCategory.where(name: name).first_or_create
self.tournament_team_categories << TournamentTeamCategory.create(team_category: team_category)
end
end
我想用“ selected check_box each do”和“ TeamCategory.where(name:name)”将TeamCategory :: NAMES.each替换为选定的值。
提前谢谢
答案 0 :(得分:1)
我是Rails的新手。我看到的是您参与了创建团队的工作,对吗?
对于您的代码,直接可以是:
<%= form.label "Seleziona Categorie" %>
<% TeamCategory::NAMES.each do |name| %> #you are looping through team category NAMES constant
<%= check_box_tag 'category_names_selected[]', name %>
<% end %>
您的表格保持原样,可以选择多个类别。
对于方法:
def create_tournament_team_categories(category_names_selected)
category_names_selected.each do |name|
team_category = name
self.tournament_team_categories << TournamentTeamCategory.create(team_category: team_category)
end
end
您可能会在teams_controller.rb中使用此方法。在控制器中,您应该能够从参数中检索新创建的选定名称数组,并带有与此类似的内容。
@category_names_selected = params[:category_names_selected]
我不知道您的应用程序有多复杂,因此它也可能嵌套在参数哈希中的["team"][:category_names_selected]
或["team"]["category_names_selected"]
下。
要查看参数哈希的确切结构并调整上面的等式,您可以在控制器文件顶部添加例如require 'pry'
,然后在方法所在的部分之后添加binding.pry
被执行。当您重新启动服务器并且应用程序到达控制器的这一部分时,您应该能够在终端中看到参数哈希的确切结构。
然后可以将数组传递给可在控制器中调用的方法。不要忘记将:category_names_selected添加到控制器中的强参数中。我希望这会有所帮助。
答案 1 :(得分:0)
第30行的控制器
def create
@tournament = Tournament.new(tournament_params)
@tournament.sport_club = current_user.sport_club
@category_names_selected = params[:category_names_selected]
if @tournament.save
redirect_to tournaments_path, notice: 'Torneo creato con successo'
end
end
模型中的方法create_tournament_team_categories
after_create :create_tournament_team_categories
def create_tournament_team_categories(category_names_selected)
@category_names_selected.each do |name|
team_category = name
self.tournament_team_categories << TournamentTeamCategory.create(team_category: team_category)
end
end