2012-05-31 36 views
1

我一直有問題,我想寫我的if else邏輯在我的控制器的新動作的方式。例如,用戶在用戶表中有兩個不同的filde,讓我們說premium_user和gold_user。我將如何編寫if else語句來說明如果用戶是高級用戶,他可以上傳3本書,並且如果用戶是金牌用戶,他可以上傳無限的書籍,而他只是沒有黃金或高級版的用戶,他只能上傳我的控制器的新行動中有2本書。謝謝簡單如果其他語句在軌道

回答

1

邏輯屬於你的模型。您可能會設置一個STI Table,它定義了您的用戶(銀牌,金牌,常用人員......)並管理授權,例如CanCan

從那裏,你只需要根據你的用戶類型來更新你的視圖。

+0

你有一個點表,並且我從來不知道abt它直到今天謝謝。但我真的知道如何使用它,下面給出的例子並不足以滿足我的情況。 – Uchenna

+0

我有的字段只是布爾字段。 – Uchenna

+0

我剛剛用康康寫了我的邏輯,並更新了你所說的看法,它的工作就很好。 – Uchenna

1

好吧,您可以選擇使用用戶表單(使用嵌套屬性)或書本形式直接上傳圖書。你可以把驗證給用戶。

class User 
    has_many :books 
    validates :books, :length => { if: Proc.new { |r| r.gold? }, allow_nil: true, maximum: 3, too_long: 'gold users can only upload 3 books' }  
    validates :books, :length => { if: Proc.new { |r| r.standard? }, allow_nil: true, maximum: 3, too_long: 'gold users can only upload 3 books' } 
end 


class Book 
    belongs_to :user 
    validates :user, :presence => true, associated: true 
end 

即使你通過書籍提交,請確保您創建一個新的書籍user.books.build,爲了驗證正確的行爲。

請注意,您的控制器新建或創建操作將是相同的,無需分叉用戶類型進行驗證。

也許你想在你的書籍/新視圖中放一個便條,或者如果用戶達到最大允許上傳的話,可以禁用該表格。

希望這可以幫助