2012-07-20 137 views
0

環境:導軌3.2.3與設計導軌:設計:用戶

我想向註冊表單添加註冊碼。註冊碼不在用戶表中。有一個單獨的registration_codes。它在註冊表中的原因是,我想比較填寫註冊表單的用戶輸入的代碼與註冊代碼表中的內容,並生成一個值,該值將進入用戶表。

我收到一條錯誤消息:

undefined method `registration_code' for #<User:0x007f91b57b7890> 

,它的指向顯示在視圖/註冊/ new.html.erb的registration_code文本框中

如何圍繞獲取代碼事實上,registration_code不是用戶表的一部分?表單工作正常,直到我將registration_code字段添加到表單。

回答

1

我將創建您的用戶模型的方法來處理您的註冊代碼邏輯:

def registration_code=(code) 
    # Check registation_codes table and produce a value that will go into the users table 
end 

表單提交這一新的領域現在應該調用此方法與提交的值

+0

這不會阻止箱子方法執行嗎? – EastsideDeveloper 2012-07-20 06:32:02

+0

它不應該。它的行爲就像ActiveRecord根據數據庫字段生成的默認設置器,除了這個是明確指定的。這種方法是首選,因爲它將邏輯推送到您的模型中,因此更易於測試並保持控制器精簡。 – Angelo 2012-07-20 06:43:15

1

我想你'使用表單構建器創建表單(一個form_for塊)。在這種情況下,您可能使用像<%= f.text_field :registration_code %>這樣的顯示文本字段,但Rails在User模型上找不到registration_code,因爲像您所說的那樣,它不在那裏。

請改爲使用<%= text_field_tag :registration_code %>。你可以通過你的控制器訪問這個通過params[:registration_code]

+0

是的,我正在使用表單生成器。你的建議應該有效。我試圖使用這樣的散列:form_fields_hash.each do | label,value | <%= f.label:label%><%= f.text_field:value%> end – EastsideDeveloper 2012-07-20 06:26:48