Rails:如何将多个复选框的参数传递给模型

时间:2019-11-12 17:09:05

标签: ruby-on-rails

我建立了这种表格,生成了一些带有“ 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替换为选定的值。

提前谢谢

2 个答案:

答案 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