Почему я получаю неопределенный метод `deep_merge 'для ошибки ActionController :: Parameters? - PullRequest
0 голосов
/ 06 июля 2018

В моем приложении Rails 5 я пытаюсь сделать это в контроллере:

  def create
    company_params = params.require(:company).permit(
      :name,
      :email,
      :people_attributes => [
        :first_name,
        :last_name
      ]
    ).deep_merge(
      :creator_id => current_user.id,
      :people_attributes => [
        :creator_id => current_user.id
      ]
    )
    @company = current_account.companies.build(company_params)
    if @company.save
      flash[:success] = "Company created."
      redirect_to companies_path
    else
      render :new
    end
  end

По какой-то причине я получаю эту ошибку, хотя:

неопределенный метод `deep_merge 'для ActionController :: Параметры: 0x007fa24c39cfb0

Что мне здесь не хватает?

Ответы [ 3 ]

0 голосов
/ 06 июля 2018

Несмотря на то, что изменение параметров в цикле запроса не является хорошей практикой, но если вы хотите это сделать, всегда есть опция .to_hash.deep_merge, чтобы вы могли получить хэш обратно из экземпляра параметров.

0 голосов
/ 06 июля 2018

ОК, я не могу заставить deep_merge работать, поэтому я закончил тем, что сделал:

  def create
    company_params = params.require(:company).permit(
      :name, 
      :email,
      :people_attributes => [
        :first_name,
        :last_name
      ]
    )
    @company = current_account.companies.build(company_params)
    @company.creator = current_user
    @person = @company.people.last
    @person.account = current_account
    @person.creator = current_user
    if @company.save
      flash[:success] = "Company created."
      redirect_to companies_path
    else
      render :new
    end
  end

Не уверен, хорошо это или плохо. Обратная связь приветствуется!

0 голосов
/ 06 июля 2018

Что мне здесь не хватает?

То, что params является экземпляром ActionController::Parameters. Это не хэш. Однако у него есть некоторые методы слияния.

params.methods.grep(/merge/)
=> [:reverse_merge!, :reverse_merge, :merge!, :merge]

Если вы хотите deep_merge, каким-то образом конвертируйте ваши параметры в хеш.

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