Почему я не могу создать объект с параметрами? - PullRequest
0 голосов
/ 19 июня 2020

Уже несколько дней мучаюсь с проблемой. Я не могу создать объект, используя параметры из формы. Моя форма:

<%= form_with(model: @battle, local: true) do |form| %>
<div class="field">
  <%= form.collection_select(:team_id, @teams, :id, :name) %>
</div>
  <%= form.submit 'Submit'%>
<% end %>

В этой форме я хочу выбрать только 1 команду.

контроллер:

  def create
    @battle = Battle.new
    @battle.user_id = current_user.id
    @battle.team_ids = params[:team_id]
    if @battle.save
      redirect_to root_path, notice: "Battle has been created"
    else
      render :new
    end
  end

  def battle_params
    params.require(:battle).permit(:team_id)
  end

И при использовании эта форма создает объект без ссылка на команду.

логи:

Processing by BattlesController#create as HTML
  Parameters: {"authenticity_token"=>"0wWoFrQXYkEsXsMRgGyKi5Mde7WndhI6zYWY4KvhQlgdcCAaCZqH1z1z9dK0x91iqOPw/Jsb2T6Q+EVtGz4VsA==", "battle"=>{"team_id"=>"14"}, "commit"=>"Submit"}
  User Load (0.7ms)  SELECT "users".* FROM "users" WHERE "users"."id" = $1 ORDER BY "users"."id" ASC LIMIT $2  [["id", 1], ["LIMIT", 1]]
  ↳ app/controllers/battles_controller.rb:14:in `create'
  Team Load (0.4ms)  SELECT "teams".* FROM "teams" WHERE 1=0
  ↳ app/controllers/battles_controller.rb:15:in `create'
   (0.4ms)  BEGIN
  ↳ app/controllers/battles_controller.rb:16:in `create'
  User Load (0.5ms)  SELECT "users".* FROM "users" WHERE "users"."id" = $1 LIMIT $2  [["id", 1], ["LIMIT", 1]]
  ↳ app/controllers/battles_controller.rb:16:in `create'
  Battle Create (3.8ms)  INSERT INTO "battles" ("user_id", "created_at", "updated_at") VALUES ($1, $2, $3) RETURNING "id"  [["user_id", 1], ["created_at", "2020-06-19 10:28:28.036147"], ["updated_at", "2020-06-19 10:28:28.036147"]]

Если я попытаюсь создать бой с двумя командами, но он будет создан только с одной (без использования параметров):

@battle.team_ids = [params[:team_id], 14]

Хотя, в консоле битва создается без проблем:

battle = Battle.new
battle.team_ids = [13, 14]

Не понимаю, в чем может быть проблема.

1 Ответ

1 голос
/ 19 июня 2020

Вместо params[:team_id] попробуйте использовать вместо battle_params[:team_id]:

@battle.team_ids = battle_params[:team_id]

, иначе вам нужно будет вызвать params[:battle][:team_id], который не является способом Rails, поскольку он не так безопасен, но все равно будет работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...