2009-10-21 121 views
0

我想創建一個用戶註冊表單,其中用戶選中一些未連接到模型的框。Formtastic和Formtaghelper

例如,可能存在'條款&條件'框,我不希望在用戶模型中顯示一個布爾型字段,其中顯示'打勾的條件&條件'。相反,我想在其他地方(如交易)創建一個記錄,記錄他們接受T的日期/時間。

另一個例子可能有些偏好,他們表示我會稍後使用並暫時保留會話,如「記住我」。

我可以將這些類型的字段與常規表單助手混合使用。在使用formtastic時,我怎麼能做到上述任何一個例子?這種棍棒必須將傳統的軌道標籤與可愛的乾淨形式代碼混合使用。

回答

1

您可以在模型中創建任意數量的虛擬屬性,這些屬性不一定需要綁定到數據庫列。將attr_accessor:terms_and_conditions添加到您的用戶模型將使該字段可用於formtastic - 即使它不是數據庫字段。您可以像其他任何字段一樣驗證它,或者創建自己的setter方法在別處創建記錄(如果這是您需要的)。

0

相反,我想創建一個記錄 其他地方(如交易) 該記錄的日期/時間,他們 接受的T &銫。

使用bensie描述的attr_accessor將該字段與formtastic集成。

Formtastic是關於視圖邏輯,而關係是更多的模型邏輯。不要擔心在表單中創建相關記錄。相反,在模型中使用類似before_update和after_save的回調來確保已創建相關記錄。

1

我傾向於不同意使用attr_accessors來處理特定於操作的條目元素的方法。如果需要記錄Cs,那麼這很有意義,但有時您需要的數據與模型無關,只與手邊的特定操作有關,例如'執行操作時執行一些重量級操作'。

假設您有一個註冊表單,並且您沒有使用OAuth,並且您可以選擇在註冊時指定Twitter用戶名和密碼。這是罰款:

<%= form.input :twitter_username %> 
<%= form.input :twitter_password, :as => :password %> 

但下面這一點讓我困惑 - 它像在這種情況下formtastic實際上帶走的是已經存在。有沒有添加params [:你的對象]的方法,同時仍然有助於做所有它可愛的佈局的東西?

如何:

class User < ActiveRecord::Base 
... 
    #I don't want this here. Its only for UserController#create. 
    #attr_accessor :tweet_when_signed_up 
... 
end 

和:

<%= form.input :tweet_when_signed_up, :as => :checkbox, :param_only => true %> 

param_only是我編造的建議。它說'這不是一個短暫的財產。它只是爲了這個動作。

class UserController < ActionController::Base 
... 

def create 
    if params[:tweet_when_signed_up] # haven't done this yet -- == 1 or !.nil? 
    Tweeter.tweet(...) 
    end 
    @user = User.create(params[:user]) 
end 

這樣做的能力可能在那裏 - 有人知道如何有效地做到我認爲上面的好主意嗎?

謝謝!