我希望能夠給代碼潛在用戶在電子郵件中的鏈接的形式(例如mysite.com/signup?beta=rapunzel)RoR:如何創建「有效註冊碼」查找?
當有人點擊的鏈接,它填充帶有值hidden_field(將只使用:params [:beta]的工作?)
然後,在它創建用戶之前,它通過檢查另一個表,我有不同的測試代碼驗證。
然後繼續並存儲哪些代碼或可能只是beta.id.
對此提出建議?一個插件已經存在?
謝謝。
我希望能夠給代碼潛在用戶在電子郵件中的鏈接的形式(例如mysite.com/signup?beta=rapunzel)RoR:如何創建「有效註冊碼」查找?
當有人點擊的鏈接,它填充帶有值hidden_field(將只使用:params [:beta]的工作?)
然後,在它創建用戶之前,它通過檢查另一個表,我有不同的測試代碼驗證。
然後繼續並存儲哪些代碼或可能只是beta.id.
對此提出建議?一個插件已經存在?
謝謝。
當用戶點擊mysite.com/signup時,與該路線相關聯的操作將具有存儲在params [:beta]中的值「rapunzel」。您可以將它分配給實例變量(@beta),將其傳遞給您的用戶控制器,並按照計劃通過您的隱藏字段傳遞給您的用戶控制器,並在保存用戶對象之前將其與您的表進行比較。
或者你可以只允許你的用戶去註冊頁面在所有的,如果他們正在傳遞一個有效的測試代碼,在這種情況下,你不需要任何特殊的表單字段:
def signup
unless BetaCode.find_by_code(params[:beta])
flash[:notice] = "You can't sign up without a beta code!"
redirect_to root_path
end
end
您從URL中獲取的參數取決於您的路由設置方式。根據您目前的路線,你會得到:
params[:beta] = "rapunzel"
如果您指定的路線爲:
map.connect '/signup/:beta', :controller => 'signup', :action => 'beta'
,你可以把他們像一個鏈接:mysite.com/signup/rapunzel代替,你會得到beta參數與之前相同。
要將beta字段放到表單上,只需將其作爲表單頁面模板上的隱藏字段包含即可。
在控制器放像:
@beta_id = params[:beta]
然後在視圖模板放:
hidden_field_tag 'beta', @beta_id
然後,當他們註冊和創建你可能會想在掛鉤一個正確的ID從用戶表中的行與包含「測試版」表中的測試版標識的行進行關聯。如果您只想讓單個用戶註冊每個測試版標識,那麼這可能是測試版表上的has_one關聯;如果多個人都可以註冊,則可能是has_many。
嗨,好吧,很酷......我想has_many協會是我正在尋找的......所以我應該創建一個beta測試版beta.id作爲一列和beta.beta作爲其他(?)我創建一個驗證來執行檢查,或者如何檢查它是否有效? – Angela 2009-04-27 01:01:45
我會這樣做的驗證。
class User < ActiveRecord::Base
validate_on_create {|r|
beta_code = BetaCode.find_by_code(r.beta_code)
beta_code && beta_code.destroy ||
r.errors.add(beta_code, "is invalid")
}
attr_accessor :beta_code
end
在您的形式:
<% form_for(@user) do |f| %>
# fields...
<%= f.text_field :beta_code %>
<% end %>
這假定您有其表包含的測試代碼列表的BetaCode模型。
啊,所以模型是BetaCode,它有幾行不同值的beta(例如BetaCode.id和BetaCode。測試版)和「除非」條款將檢查所有值,如果它沒有找到它,這將是一個無效的註冊頁面? – Angela 2009-04-27 01:03:09
沒錯。除非與「if!子句」相同。這是Ruby的漂亮但混亂的成語之一,許多人不會因爲這個原因而使用它 - 這是一種個人風格的東西。 :) 而且,是的,這就是我如何從原始問題的描述中設想出BetaCode:包含有效的測試代碼的條目表,其中包含行「id」和「code」。當然,你是如何做到的,取決於你,Daemin的建議是非常好的。 – Raphomet 2009-04-27 01:24:55