2014-11-06 3 views
0

Я создал новый проект рельсов и создал несколько эшафот.рельсы представляют дополнительные параметры флажков для создания действия

Для этого вопроса я буду говорить о двух моделей/объектов/классов:

Model_A 
Model_B 

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

Отношения между Model_A и Model_B является: Model_A имеет много Model_B с и Model_B принадлежит Model_A

Я хочу, чтобы редактировать New-формы в new.html.erb из Model_A. При вызове /Model_As в браузере он показывает мне форму. Я обновил форму, чтобы он показывал мне список каждого Model_B Объекта, который я создал ранее. В каждой строке содержится check_box, и вот моя проблема:

Когда я звоню /Model_As Я хочу создать новый объект Model_A. Model_A имеет много Model_B, поэтому было бы неплохо проверить некоторые перечисленные объекты Model_B и когда я нажимаю submit Model_A Объект будет создан со ссылками на отмеченные Model_B Объекты. Не звучит так сложно, но я не могу его решить.

Как мне изменить контроллер Model_A? Нужно ли добавлять маршрут? И как должен выглядеть мой код формы?

Я знаю про form_helper за , но пока не повезло.

Эфир Я получаю необходимый params (массив идентификаторов объекта проверки), но объект Model_A не создается. Или объект создается, но идентификаторы не отправляются.

Я думаю, что это не проблема для опытных разработчиков рубинов/рельсов. Я новичок в этом.

Спасибо!

+2

Это действительно помогает, когда вы показываете исходный код. Труднее представить, что вы делаете, чем читать минимальный пример, демонстрирующий проблему. –

ответ

0

Вы должны внести изменения в два файла в основном.

  1. controllers/model_as_controller.rb - new действие

    def new 
        @model_a = Model_A.new 
        @model_bs = Model_B.all 
    end 
    
  2. views/model_as/new.html.erb - в виде нового @model_a

    <%= form_for ... %> 
        ... 
    
        <%= hidden_field_tag :model_bs %> 
        <% @model_bs.each do |model_b| %> 
        <%= check_box_tag "model_bs[]", model_b.id %> 
        <%= label_tag("model_b_#{model_b.id}", model_b.name) %> 
        <% end %> 
    
        ... 
    <% end %> 
    
  3. controllers/model_as_controller.rb - в create действия. После подачи формы на new.html.erb приложение направляется на это действие. Список проверенных model_bs будет отображаться как строка идентификаторов объектов Model_B, разделенных запятыми. Формат будет - «1,4,7».Таким образом, вы пишете следующий код, чтобы извлечь их в массив идентификаторов

    def create 
        model_bs = Model_B.find(params[:model_bs]) 
    
        ... # the code to create the @model_a object and save it 
        ... 
    
        @model_a.model_bs << model_bs # This will set the model_a id in all the model_b objects 
        @model_a.save! 
    
        ... #code to redirect on success or render 'new' on failure 
    end 
    

Убедитесь, что есть поле model_a_id в таблице Model_bs и has_many :model_bs и belongs_to :model_a строки, написанные в соответствующих моделях.

+0

Здравствуйте, спасибо большое за ответ, но это не сработает. Model_A создается, и пересылка работает нормально, но когда я хочу, чтобы результат был пустым. Я изменил show.html.erb Model_A, чтобы отобразить все @ model_a.exercises, но пустым. Нет ли способа сделать это без JavaScript? Нет Ruby/Rails? –

+0

Попробуйте отредактированный код. Я удалил все javascript из представления. –

+0

Теперь я получаю «ожидаемый массив (полученный String) для param' model_bs »при отправке формы (Internal Server Error). –

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