2014-10-11 2 views
0

Каковы правильные шаги при добавлении новых текстовых полей в форму рельсов, чтобы рельсы регистрировали ее?добавление нового элемента в форме рельсов

текущая форма:

<%= form_for(@order) do |f| %> 
    <% if @order.errors.any? %> 
    <div id="error_explanation"> 
     <h2><%= pluralize(@order.errors.count, "error") %> prohibited this order from being saved:</h2> 

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

    # I WANT TO ADD A QUANTITY FIELD TO MY FORM 
    <div><%= f.label :quantity %><br /> 
    <%= f.text_field :quantity, autofocus: true %> 
    </div> 

    <div class="actions"> 
    <%= f.submit %> 
    </div> 
<% end %> 

после добавления кода выше, я изменил свою миграцию базы данных.

[временная метка] _create_orders.rb

class CreateOrders < ActiveRecord::Migration 
    def change 
    create_table :orders do |t| 
     # added this line to the database since I want to have a new field in my form 
     t.string :quantity 

     t.timestamps 
    end 
    end 
end 

После этого я попытался пойти на заказы/новые, чтобы создать новый заказ, чтобы увидеть, если моя форма правильно вывода, но вместо этого я получаю неопределенный метод " количество "ошибка в/заказы/новые

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

+0

Вы только что отредактировали существующий файл миграции? 'rake db: migrate' не будет повторно запускать миграции, которые уже были запущены, даже если они были отредактированы. Двойная проверка в 'db/schema', что поле количества было создано. – ptd

ответ

1

Если вы хотите добавить дополнительные поля в таблице (как добавление/редактирование атрибутов/существующей модели), что вы уже создали , используйте команду migration generator (2.1) для самостоятельной миграции. Не редактируйте файл переноса после запуска

rake db:migrate 

Предпочитаемого решения:

Вы можете просто отменить любые изменения, которые вы сделали в этой миграции файл и просто использовать генератор миграции. Затем мигрируйте. Вот пример кода (непроверенные)

rails generate migration add_quantity_to_orders quantity:string 
rake db:migrate 

Non-предпочтительное решение

В качестве простого исправления, так как я не знаю, сколько Миграции у вас есть, я думаю, вы должны бросить все и воссоздать Таблица. Вам не нужно отменять сделанные вами изменения.

rake db:migrate VERSION=0 
rake db:migrate 

Таким образом, он воссоздает таблицы для вас. Это цена, которую вы заплатите за игру с уже перенесенными файлами.

Я надеюсь, что это решает вашу проблему.

0

Очевидно, что миграция редактируется.

В приложении Rails никогда не редактируйте миграцию. создайте новую миграцию для добавления столбца.

После этого. Убедитесь, что у вас есть attr_accessor, если вы не используете разрешение RAils 4.else add для каждого столбца в контроллере.

params.require (: заказы) .permit (: количество)