2016-09-08 6 views
0

На моем приложении рельсы в Views/карты/_form у меня есть код для f.select поле:передавая массив f.select рубин на рельсах

<%= f.select :tag_speciality, options_for_select(@subdomain.tag_speciality), {}, {class: 'form-control'} %> 

Это дало мне выход:

<select class="form-control" name="card[tag_speciality]" id="card_tag_speciality"> 
    <option value="Professor de Yoga">Professor de Yoga</option> 
    <option value="Professora de Yoga">Professora de Yoga</option> 
    <option value="Estúdio de Yoga">Estúdio de Yoga</option> 
</select> 

в моей миграции файл у меня есть:

add_column :cards, :tag_speciality, :string, array: true 

Когда я иду в форму и выбрать любой вариант, например, «профессор де Йогу», и сохранить, я получаю результат:

[] 

вместо:

["Professor de Yoga"]

Это мой контроллер:

def index 
 
    @cards = Card.all 
 
    end 
 

 
    def create 
 
    @card = @user.cards.new card_params 
 

 
    respond_to do |format| 
 
     if @card.save 
 
     format.html { redirect_to cards_from_subdomain_path(@subdomain.id), notice: 'Card was successfully created.' } 
 
     format.json { render :show, status: :created, location: @card } 
 
     else 
 
     format.html { render :new } 
 
     format.json { render json: @card.errors, status: :unprocessable_entity } 
 
     end 
 
    end 
 
    end 
 

 
    def update 
 
    respond_to do |format| 
 
     if @card.update(card_params) 
 
     format.html { redirect_to cards_from_subdomain_path(@subdomain.id), notice: 'Card was successfully updated.' } 
 
     format.json { render :show, status: :ok, location: @card } 
 
     else 
 
     format.html { render :edit } 
 
     format.json { render json: @card.errors, status: :unprocessable_entity } 
 
     end 
 
    end 
 
    end 
 
    
 
    # Never trust parameters from the scary internet, only allow the white list through. 
 
    def card_params 
 
    params.require(:card).permit(
 
     :name, 
 
     :phone, 
 
     :email, 
 
     :cover, 
 
     :is_published, 
 
     :subdomain_id, 
 
     :domain_id, 
 
     :profile_id, 
 
     :is_solidarity, 
 
     :tag_speciality, 
 
     :tag_location, 
 
     user_id: [] 
 
    ) 
 
    end 
 
end

Есть что-нибудь, что мне не хватает? Thanks

+2

показать свой код контроллера –

+0

Вы поместили: tag_location в разрешенные параметры в вашем контроллере? –

+0

Да, только что добавил контроллер, tag_location уже находится в разрешенных параметрах в моем контроллере, похоже, что проблема в том, что проблема в нем - это массив: истинное поле, если оно было простым строковым полем, это было бы нормальным. .. –

ответ

1

Ditto @ EJ2015.

Просто добавьте

@card.tag_speciality.push(card_params[:tag_speciality]) 
@card.save 

к вашему create.

respond_to do |format| 
     if @card.tag_speciality.push(card_params[:tag_speciality]) && @card.save 
     format.html { redirect_to cards_from_subdomain_path(@subdomain.id), notice: 'Card was successfully created.' } 
     format.json { render :show, status: :created, location: @card } 
     else 
     format.html { render :new } 
     format.json { render json: @card.errors, status: :unprocessable_entity } 
     end 
    end 
+0

Отлично, на создание это сработало :), но как я могу это сделать при обновлении? Я попытался: «если @ card.tag_speciality.push (card_params [: tag_speciality]) && @ card.update (params) ', но не работает! –

+0

Проблема в том, что когда вы делаете @ card.update (params), вы снова назначаете строковое значение из параметров непосредственно в столбец массива. Вы можете сделать это так же, как метод create, сначала присвоив значения атрибутам, а затем сохраните объект. – EJ2015

+0

работал, спасибо !!! –

1

Поскольку ваш tag_speciality является столбцом массива, вам необходимо назначить данные с помощью метода массива в вашем контроллере.

@card.tag_speciality.push(card_params[:tag_speciality]) 
@card.save 

Конечно, вам также необходимо изменить назначение других атрибутов. Кстати, вы можете увидеть, что пошло не так в вашем журнале сервера. В этом случае вы должны увидеть, что база данных отклоняется.

+0

спасибо за ответ, где в контроллере я могу использовать код, который вы запустили? Будет ли в «def card_params»? –

+0

Это будет в ваших действиях по созданию и обновлению. Вы можете сделать это, как предложил @ravi. – EJ2015

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