0

У меня есть модель под названием TaxCategory, что has_many :tax_rates и accepts_nested_attributes_for :tax_rates, reject_if: :all_blank, allow_destroy: true.Рельсы 4: Сильные параметры + вложенные атрибуты + множественный выбор

TaxRates сам по себе является моделью, которая, среди прочего, has_and_belongs_to_many :countries.

Эти отношения хорошо работают, и я могу добавлять и удалять страны через консоль.

Однако, у меня есть форму для TaxCategory, которая содержит fields_for :tax_rates do |g|.

Внутри здесь, у меня есть

g.select :country_ids, Country.collect{|c| [c.name, c.id]}, {multiple: true}, {} 

Он подает в tax_categories контроллер, который использует следующий код для обновления TaxCategory:

class TaxCategoriesController 
    before_action :set_tax_category, only: [:show, :edit, :update, :destroy] 

...*snip*... 

    def update 
    respond_to do |format| 
     if @tax_category.update(tax_category_params) 
     format.html { redirect_to [:dashboard, @tax_category], notice: 'Tax Category was successfully updated.' } 
     format.json { render :show, status: :ok, location: @tax_category } 
     else 
     format.html { render :edit } 
     format.json { render json: @tax_category.errors, status: :unprocessable_entity } 
     end 
    end 

    private 

    def set_tax_category 
    @tax_category = TaxCategory.find(params[:id]) 
    end 

    def tax_category_params 
    params.require(:tax_category).permit(:name, tax_rates_attributes:[:id, :rate,{country_ids: []}, :_destroy]) 
    end 


end 

Однако это делает не работу; При отправке формы сохраняется только первая страна, а в командной строке Rails отображается сообщение Unpermitted parameter: country_ids.

Я думаю, что это проблема, вызванная params.permit, но я не понимаю, что я делаю неправильно.

Что происходит не так, и как я могу это исправить?

ответ

1

UPDATE

Я думаю, что я нашел эту проблему. Ваши параметры образца говорят country_ids: 1, в которых он должен быть country_ids: [1], потому что это должен быть массив/несколько значений.

Update следующее в:

g.select :country_ids, Country.collect{|c| [c.name, c.id]}, {}, {multiple: true} 
Самовольная Params ошибка чувствует, что это, скорее всего, `tax_category_params` проблема. Вы можете попробовать это Защиту tax_category_params params.require (: tax_category) .permit (: имя, tax_rates_attributes: [: идентификатор,: скорость, country_ids: [],: _destroy]) конец
+0

Это оказывается быть недействительным синтаксисом Ruby, так как интерпретатору не удается определить, как его обернуть как хэш (что, как мне кажется, связано с [именованными параметрами] (http://brainspec.com/blog/2012/10/08/keyword-arguments-ruby-2-0 /). Поместив его в конец, вот так: 'params.require (: tax_category) .permit (: name, tax_rates_attributes: [: id,: rate,: _destroy, country_ids: []]) 'не выводит синтаксическую ошибку, но все равно имеет тот же результат, что и выше, например,' Unpermitted parameter: country_ids' – Qqwy

+1

Хм .. можете ли вы «ставить params» внутри действия обновления? Мне любопытно s ee фактические параметры запроса. «Tax_category_params» выглядит хорошо для меня. –

+0

Параметры, которые отправляются на запрос: '{" utf8 "=>" ✓ "," authenticity_token "=>" 424242VHWTNtNTDzPhV9U1aV + t1d2VBx9 + heakYGSyozK + MkYvCPc3JJZIB + zSXn2vsqucZQ/P2J8F8ale2Yw == "," tax_category "=> {" name "=>" General "," tax_rates_attributes "=> {" 0 "=> {" rate "=>" 21.0 "," country_ids "=>" 1 "," _destroy "=>" false "," id " => "1"}, "1" => {"rate" => "10.0", "country_ids" => "2,3,4", "_destroy" => "false", "id" => " 3 "}}}," button "=>" "," id "=>" 1 "}', что выглядит хорошо для меня. – Qqwy

Смежные вопросы