Метод сильных параметров ожидает, что `define method_name` как` controller name` - PullRequest
1 голос
/ 28 мая 2020

рельсы (5.2.2.1) ruby 2.5.0p0

  1. Родительский контроллер Country, State, City
class LocalityController < ApplicationController
  def create
    locality = model_name.new(locality_master_params)
    respond_to do |format|
      if locality.save
        format.html { redirect_to locality, notice: 'Record was successfully created.' }
      else
        format.html { render :new }
      end
    end
  end

  private
  def model_name
    "#{controller_name.titleize.delete(' ').singularize}".constantize
  end

  def locality_params
    @locality_params = %i|name code status|
  end

  def locality_master_params
    params.require("#{controller_name.singularize}".to_sym).permit(locality_params)
  end
end
Контроллер состояния
class StateMastersController < LocalityController
  alias_method :state_master_params, :locality_master_params

  private
  def locality_params
    @locality_params = %i|name code status country_code|
  end
end

Ожидание : контроллеры страна-штат-город должны быть унаследованы от одного контроллера и управлять одинаковыми шаблонами, методами для всех этих контроллеров до DRY.

Этот код работает нормально, как и ожидалось.

Проблема : после удаления приведенного ниже кода (поскольку он не нужен):

alias_method :state_master_params, :locality_master_params

это дает ошибку как: ActiveModel::ForbiddenAttributesError

Я добавил alias_method, чтобы предотвратить указанную выше ошибку.

Получение такой же ошибки и в других контроллерах: контроллеры страны-города.

Существует ли какое-либо соглашение об определении метода как state_master_params для state_master_controller? `

...