以rails形式添加新元素

时间:2014-10-11 18:29:36

标签: ruby-on-rails forms ruby-on-rails-4 form-for

将新文本字段添加到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

之后我尝试去订单/新创建新订单以查看我的表单输出是否正确,但我得到未定义的方法&#34;数量&#34;错误/ orders / new

我在这里做错了什么,我该怎么做才能解决它?

2 个答案:

答案 0 :(得分: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

这样它会为你重新创建表格。这是您为摆弄已经迁移的文件而支付的价格。

我希望这能解决你的问题。

答案 1 :(得分:0)

清楚地表明迁移已被编辑。

在Rails App中,永远不要编辑迁移。创建一个用于添加列的新迁移。

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

params.require(:订单).permit(:量)