2014-10-11 63 views
0

将新文本字段添加到rails表单以便rails将注册它的正确步骤是什么?以rails的形式添加新元素

电流形式:

<%= 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 2014-10-11 18:35:52

回答

1

(如在添加/编辑属性到现有的模型/),您已经创建,使用migration generator来(2.1)创建一个独立的迁移。

您可以直接撤销你在迁移文件所做的,只是使用迁移产生任何变化:你已经运行

rake db:migrate 

较受欢迎的解决方案后,不要编辑迁移文件。然后迁移。下面是示例代码(未经测试)

rails generate migration add_quantity_to_orders quantity:string 
rake db:migrate 

非首选的解决方案

举一个简单的修复,因为我不知道你有多少移民有,我想你应该放下一切,重新创建表。您不必撤消您所做的更改。

rake db:migrate VERSION=0 
rake db:migrate 

这样它会为您重新创建表格。这是您为了处理已迁移的文件而付出的代价。

我希望这可以解决您的问题。

0

它清楚地表明,迁移是编辑。

在Rails应用程序中,请勿编辑迁移。创建用于添加列的新迁移。

之后。如果你不在RAils上,请确保你有attr_accessor。4.在控制器的每一列上添加许可证。

params.require(:单).permit:如果你想额外的字段添加到表(数量)