2014-02-16 34 views
1

我使用的軌道創建一個在線商店應用程序,當用戶處理我最初創建的列的順序支架訂單:新列在軌不節能的form_for

  • :名稱,:文本
  • :地址:text_field
  • :電子郵件:電子郵件

這工作得很好並且形式將提交所有數據將被添加到數據庫中。不過,我想兩個新列添加到數據庫中,DELIVERY_DATE和delivery_time所以我創建了一個遷移,並通過

  • add_column加入他們:訂單:DELIVERY_DATE,:文本
  • add_column:訂單:delivery_time,:文字

接下來,我走進了_form部分並添加新的進線的form_for方法現在看起來像

<div class="field"> 
    <%= f.label :delivery_date %> 
    <%= f.text_area :delivery_time %> 
</div> 

但是,當加載窗體我將信息輸入到這兩個新領域它不會保存到數據庫中,當我使用sqlite3的選擇*從訂單我得到

id = 1 
name = name entered 
address = address entered 
email = email entered 
delivery_date = 
delivery_time = 

我不知道有沒有添加這些列信息其他地方?謝謝

回答

6

在你的控制器中,你需要允許這些屬性通過params傳遞。尋找名爲order_params的方法。

+0

謝謝,工作完美! – jrgrs

3

在您的rails控制器類中,在處理表單提交的方法中,您是否使用將提交的值綁定到ActiveRecord對象的安全方法?例如,如果你這樣做:

def create 
    @person = Person.new(person_params) 
    @person.save 
end 

def person_params 
    params.require(:person).permit(:name, :address, :email) 
end 

然後你只需要添加額外的參數名稱到允許的參數名稱列表。例如:

def person_params 
    params.require(:person).permit(:name, :address, :email, :delivery_date, :delivery_time) 
end 
0

最有可能你需要添加它,如果你不使用軌道4

attr_accessible name, address, ... , delivery_date, delivery_time 
0

您需要了解哪些在Rails4引入解決的strong parameters概念attr_accessible您問題。

它使您能夠有意識地選擇應允許哪些屬性在數據庫中進行批量更新。 就你的情況而言,當你使用3個屬性name, address and email生成訂單scaffold時,鋼軌生成器在OrdersController中爲您創建了現成的私人訂單order_params,併爲您準備了這3個屬性。

但是,當你產生遷移2點新的屬性,軌道發電機只是要爲你創建一個遷移文件,併爲您提供這2個新屬性不會更新order_ params方法。如果您希望在數據庫中更新這兩個屬性delivery_date and delivery_time,則只需在order_params方法中允許它們。這應該可以解決你的問題。