2017-09-28 4 views
0
non autorisée est

J'ai un has_many par rapport aux modèles de réservation et AdditionalService:Rails 5.1.4 et paramètres cancancan sur la mise à jour

class Reservation < ApplicationRecord 
    has_one :stretch, dependent: :destroy 

    has_many :reservation_additional_services, dependent: :destroy 
    has_many :additional_services, through: :reservation_additional_services 

    belongs_to :user 

    enum status: [:submitted, :cancelled, :confirmed, :on_going, :altered, :finished] 

    accepts_nested_attributes_for :stretch 
    validates :additional_service_ids, presence: true, unless: ->(reservation) { reservation.is_a?(Reservation::Stay) } 

    def cancel! 
    self.cancelled! 
    end 

    def costs 
    additional_costs + additional_services.map(&:price).inject(0){|sum, x| sum + x} 
    end 
end 

class AdditionalService < ApplicationRecord 
    has_many :reservation_additional_services 
    has_many :reservations, through: :reservation_additional_services 
end 

J'ai mon ReservationsController défini comme ceci:

class ReservationsController < ApplicationController 
    load_and_authorize_resource except: [:index, :create] 

    def index 
    @reservations = current_user.reservations 
    end 

    def new 
    @reservation.build_stretch 
    end 

    def create 
    @reservation = Reservation.new(reservation_prams) 
    @reservation.user = current_user 

    @reservation.build_stretch unless @reservation.stretch.present? 

    if @reservation.save 
     redirect_to reservations_url 
    else 
     render :new, status: :not_acceptable 
    end 
    end 

    def edit 
    end 

    def update 
    puts "**************************" 
    p update_params 
    p params 
    if @reservation.update_attributes(update_params) 
     redirect_to reservations_url 
    else 
     render :edit, status: :not_acceptable 
    end 
    end 

    def destroy 
    @reservation.cancel! 
    redirect_to reservations_url 
    end 

    private 
    def reservation_prams 
     params.require(:reservation).permit(
     stretch_attributes: [:start_date, :end_date], 
     additional_service_ids: [] 
    ) 
    end 

    def update_params 
     params.require(:reservation).permit(
     additional_service_ids: [] 
    ) 
    end 
end 

J'utilise un type régulier de formulaire et quand j'essaie de changer de service supplémentaire dans select et submit, rien ne change et dans le serveur j'obtiens cette sortie:

************************** 
Unpermitted parameters: :stretch_attributes, :additional_service_ids 
<ActionController::Parameters {} permitted: true> 
<ActionController::Parameters {"utf8"=>"✓", "_method"=>"patch", "authenticity_token"=>"RFTlG91gWUVOLTTEn/319D1v1d+bmTc+sjhnXFlFUSdHwxZXCjpCRM+1fsYYLhHqyhk7w5dtYXZZrN3X0WqHeA==", "reservation"=><ActionController::Parameters {"stretch_attributes"=>{"start_date"=>"2017-01-12 00:00:00 UTC", "end_date"=>"2017-01-14 00:00:00 UTC", "id"=>"1"}, "additional_service_ids"=>"3"} permitted: false>, "commit"=>"Zarezerwuj", "controller"=>"reservations", "action"=>"update", "id"=>"1"} permitted: false> 

Je ne sais pas quel est le problème parce que tout ne fonctionne pour l'autre modèle qui hérite de la réservation - Reservation::Stay ici est contrôleur pour que:

class StaysController < ApplicationController 
    load_and_authorize_resource :reservation, parent: false, class: Reservation::Stay, except: [:create] 

    def new 
    @reservation.build_stretch 
    render '/reservations/new' 
    end 

    def create 
    @reservation = Reservation::Stay.new(stay_params) 
    @reservation.user = current_user 

    @reservation.build_stretch unless @reservation.stretch.present?  

    if @reservation.save 
     redirect_to reservations_url 
    else 
     render '/reservations/new', status: :not_acceptable 
    end 
    end 

    def update 
    if @reservation.update_attributes(update_params) 
     @reservation.altered! 
     redirect_to reservations_url 
    else 
     render '/reservations/edit', status: :not_acceptable 
    end 
    end 

    private 
    def stay_params 
     params.require(:reservation_stay).permit(
     stretch_attributes: [:start_date, :end_date], 
     additional_service_ids: [], 
     room_ids: [] 
    ) 
    end 

    def update_params 
     params.require(:reservation_stay).permit(
     additional_service_ids: [] 
    ) 
    end 
end 

Il est ma forme:

= simple_form_for(@reservation, 
    defaults: { label: false }) do |f| 
    .row 
    = f.simple_fields_for :stretch do |sf| 
     = sf.input :start_date, as: :string, label: t('.labels.start_date'), input_html: { class: 'datepicker' } 
     = sf.input :end_date, as: :string, label: t('.labels.end_date'), input_html: { class: 'datepicker' } 
    - if @reservation.is_a?(Reservation::Stay) 
     = f.input :additional_service_ids, 
     as: :select, input_html: { multiple: true }, label: t('.labels.additional_service'), 
     collection: AdditionalService.all.collect {|as| ["#{as.name} - #{as.price}", as.id] } 
     = f.input :room_ids, 
     as: :select, 
     input_html: { multiple: true }, 
     label: t('.label.rooms'), 
     collection: Room.all.collect{ |room| ["#{room.number}", room.id]} 
    - else 
     = f.input :additional_service_ids, 
      as: :select, 
      collection: AdditionalService.all.collect {|as| ["#{as.name} - #{as.price}", as.id] } 

    .row 
    = f.submit t('.labels.book') 

javascript: 
    Reservations.initForm(); 

Répondre

0

En fait, , J'ai eu une petite faute de frappe dans le nom de la méthode reservation_params et c'était tout le problème.