2016-01-11 2 views
0

У меня есть форма, которая в основном показывает флажки с помощью collection_check_boxes ... У меня также есть то, что, как я считаю, является правильной вещью внутри контроллера, чтобы ожидать форму, но я получаю странно ошибка, что я не видел целый деньRuby on Rails X ожидается, получил строку

Вот мой _form.html.erb:

<%= form_for @report, :html => {class: "form-horizontal"} do |f| %> 
    <% if @report.errors.any? %> 
    <div id="error_explanation"> 
     <h2><%= pluralize(@report.errors.count, "error") %> prohibited this report from being saved:</h2> 

     <ul> 
     <% @report.errors.full_messages.each do |message| %> 
     <li><%= message %></li> 
     <% end %> 
     </ul> 
    </div> 
    <% end %> 

    <div class="form-group"> 
    <%= f.label :phases, class: "col-sm-3 control-label" %> 
    <div class="col-sm-5"> 
     <%= f.collection_check_boxes :phases, Phase.all, :id, :name %> 
    </div> 
    </div> 
    <div class="modal-footer"> 
    <button type="button" class="btn btn-default btn-xs" data-dismiss="modal">Close</button> 
    <%= f.submit nil, class: "btn btn-primary btn-xs" %> 
    </div> 
<% end %> 

контроллер имеет это для Params:

params.require(:report).permit(:phases => []) 

Вот ошибка я получаю когда суб для синхронного формы:

фазы (# 70354525541300) ожидается, получил строка (# 5990260)

Любая идея, что я делаю неправильно здесь?

+0

Я исправил это, удалив ассоциации моделей, но действительно ли нужны ассоциации? Я просто хочу форму с флажками и автоматически их проверяю (когда я редактирую или просматриваю форму) на основе того, что является базой данных. Идк, почему это кажется таким трудным. – LewlSauce

ответ

0

Где у вас есть:
<%= f.collection_check_boxes :phases, Phase.all, :id, :name %>

Попробуйте изменить: фазам: phase_ids:
<%= f.collection_check_boxes :phase_ids, Phase.all, :id, :name %>

А на контроллере, изменения:
params.require(:report).permit(:phases => [])
к:
params.require(:report).permit(:phase_ids => [])

Я не делал этого, но, насколько мне известно, это должно сработать.

+0

Получение этой ошибки при изменении фаз в фазе: неопределенный метод 'phase_ids 'для # LewlSauce

2

действительно ли необходимы ассоциации?

lol.


Вы получили ошибку, потому что вы прошли string когда Rails ожидал object. Используйте следующее:

<%= f.collection_check_boxes :phase_ids, Phase.all, :id, :name %> 

params.require(:report).permit(phase_ids: []) 

Если вы хотите, чтобы заполнить has_and_belongs_to_many ассоциации (что я полагаю, вы имеете), вы хотите использовать атрибут collection_singular_ids. Это принимает ключи вы отправляете из вашей HTML-формы (пояснено ниже):

-

Что вы сделали эквивалент этого:

#app/models/report.rb 
class Report < ActiveRecord::Base 
    has_and_belongs_to_many :phases 
end 

params: { 
    report : { 
     "phases": ["3", "5", "6"] 
    } 
} 

подразумевается Ассоциация «фазы» для заполнения ActiveRecord::Associations::CollectionProxy (IE ActiveRecord вытаскивает связанные объекты из базы данных phases).

Когда вы используете collection_check_boxes, вы только отправляете первичные ключи объектов, которые хотите выбрать. Посмотрите сами в своих параметрах; таким образом, когда вы разрешаете параметр непосредственно через ваш контроллер, Rails будет иметь проблему, когда ему нужны объекты Phase.

Решение состоит в том, чтобы заполнить атрибут phase_ids, как описано в приведенной выше ссылке.