2014-11-17 5 views
1

Я пользуюсь Rails 4.1.6Multiple check box not working Rails 4

Я пытаюсь создать возможность выбора как минимум 3 сервисов, а затем сохранить с рекламой.

структура модели выглядит так:

class Service < ActiveRecord::Base 
    belongs_to :advertisement 
end 

class Advertisement < ActiveRecord::Base 
    has_many :services 
end 

Моя форма:

<% @services.each do |service| %> 
     <li> 
     <%= check_box_tag 'service_ids[]', service.id -%> 
     <%= h service.name -%> 
     </li> 
    <% end %> 

Контроллер:

class AdvertisementsController < ApplicationController 


     before_action :authenticate_user! 
     before_action :set_advertisement, only: [:show, :edit, :update, :destroy] 
    respond_to :html, :xml, :json 

     def index 
     @advertisements = Advertisement.all 
     respond_with(@advertisements) 
     end 

     def show 
     @advertisement = Advertisement.find(params[:id]) 
     respond_with(@advertisement) 
     end 

     def new 
     @advertisement = Advertisement.new 
     @services = Service.all 
     respond_with(@advertisement) 
     end 

     def edit 
     end 


     def create 
     @advertisement = Advertisement.new(advertisement_params) 
     if @advertisement.save 
     if params[:images] 

      params[:images].each { |image| 
       @advertisement.pictures.create(image: image) 
      } 
      respond_with(@advertisement) 
      end 

     else 
      format.html { render 'new'} ## Specify the format in which you are rendering "new" page 
      format.json { render json: @advertisement.errors } ## You might want to specify a json format as well 
     end 
     end 

     def update 
     @advertisement.update(advertisement_params) 
     respond_with(@advertisement) 
     end 

     def destroy 
     @advertisement.destroy 
     respond_with(@advertisement) 
     end 

     private 
     def set_advertisement 
      @advertisement = Advertisement.find(params[:id]) 
     end 

     def advertisement_params 
      params.require(:advertisement).permit(:name, :user_id, :advertisement_id, :image,:terms_of_service,:region, :age, :height, :phone_number,:description) 
     end 
    end 

Когда я проверяю кратных услуг и нажмите кнопку Сохранить там нет ошибок. Когда я проверил файлы журналов я получил сообщение "

Parameters: ... "service_ids"=>["1", "2", "3"] ... 

Но затем в консоли я проверяю:

2.1.3 :008 >t = Advertisement.last (ALL OK) 
.... 
    2.1.3 :008 > t.services 

=> #<ActiveRecord::Associations::CollectionProxy []> 

И это ошибка Проблема в ассоциации, но everyrhing кажется нормально для меня

.. ?

Что может быть проблема Благодаря

+1

Где ошибка? Ваш последний блок кода не является проблематичным. Как вы сохраняете услуги в объявлении? – deefour

+1

Вы разрешили service_ids в методе 'ads_params' или как вы его называли в своем контроллере? –

+0

@japed Я разрешил: service_id – Edgars

ответ

1

Там находятся в advertisement_params нет service_ids Добавьте их:.

@advertisement = Advertisement.new(advertisement_params.merge(service_ids: params[:service_ids])) 
# or 
@advertisement = Advertisement.new(advertisement_params) 
@advertisement.service_ids = service_ids