2014-10-11 62 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:如果你想額外的字段添加到表(數量)