Cześć,
/Rails 5.1.2, Ruby 2.4.1, Postgress 9.5/
Mam model:
class CreateRoles < ActiveRecord::Migration[5.1]
def change
create_table :roles do |t|
t.string :name
t.boolean :special, null: false, default: false, index: true
t.string :activities, array: true, using: 'gin', default: '{}'
t.text :note, default: ""
t.timestamps
end
end
end
na _form
pole activities
edytuję jako
f.text_field :activities
do controllera trafia:
Processing by RolesController#update as HTML
Parameters: {“utf8”=>“✓”, “authenticity_token”=>“dZXVxB+Q8NtESy9fsxRLs8YCG7R6AkuIdRQKSr8GMWYodB10I1ZNVonrtxzjWQSdiTM8IlBWkurv3i5KRZZaUg==”, “role”=>{“name”=>“Customers Admin”, “special”=>“1”, “note”=>“ble, ble”, “activities”=>“customer:index customer:show customer:create customer:update customer:delete”}, “commit”=>“Update Role”, “id”=>“21”}
gdy w akcji update mam wymienione paramatry i split
na params[:role][:activities]
def update
@role = Role.find(params[:id])
respond_to do |format|
if @role.update(name: params[:role][:name], note: params[:role][:note], special: params[:role][:special],activities: params[:role][:activities].split)
flash[:success] = t('activerecord.successfull.messages.updated', data: @role.fullname)
format.html { redirect_to @role }
format.json { render :show, status: :ok, location: @role }
else
format.html { render :edit }
format.json { render json: @role.errors, status: :unprocessable_entity }
end
end
end
to wszystko się elegancko zapisuje.
Chcę jednak użyć zamiast
if @role.update(name: params[:role][:name], note: params[:role][:note], special: params[:role][:special],activities: params[:role][:activities].split)
konwencji:
if @role.update(role_params)
…
oraz
private
def role_params
params.require(:role).permit(:name, :note, :activities, :special)
end
Jak zawartość permit(…) winna być zdefiniowana, by przyjmował activities jako tablicę?
P.S.
Nawet, gdy wcześniej w akcji update robię:
params[:role][:activities] = params[:role][:activities].split
to do bazy zapisywana jest pusta tablica [] i dostaję info w logu info:
Unpermitted parameter: :activities