2012-05-31 5 views
1

컨트롤러의 새로운 동작에서 if else 논리를 작성하는 방식에 문제가 있습니다. 예를 들어 사용자는 user 테이블에 두 개의 서로 다른 파일을 가지고 있습니다. premium_user와 gold_user라고합시다. 사용자가 프리미엄 사용자 인 경우 3 권의 책을 업로드 할 수 있고 사용자가 금 사용자 인 경우 무제한 도서를 업로드 할 수 있으며 골드 또는 프리미엄이없는 사용자 인 경우에만 업로드 할 수있는 if else 문을 작성합니다 내 컨트롤러의 새로운 작업에 2 권의 책. 감사합니다.레일에 else 문이있는 경우 간단합니다.

답변

1

로직이 모델에 속합니다. 사용자 (은색, 금, 일반 사용자 등)를 정의하고 승인을 관리하는 STI Table을 설정하고 예 : CanCan으로 설정합니다.

거기에서 사용자의 유형에 따라보기를 업데이트하면됩니다.

+0

당신은 STI 테이블이있는 지점이 도움 오늘 감사까지 있습니다 ABT 몰랐어요. 그러나 나는 그것을 많이 사용하는 방법을 알고 있으며, 아래에 주어진 예는 내 경우에 부합 할만큼 충분히 순탄하지 않다. – Uchenna

+0

내가 가진 필드는 부울 필드입니다. – Uchenna

+0

방금 ​​cancan을 사용하여 내 논리를 작성하고 u와 같은 뷰를 업데이트했으며 제대로 작동합니다. – 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와 함께 새로운 책을 만들 수 있는지 확인하십시오.

컨트롤러가 새 것이거나 생성 동작이 동일하므로 유효성 검사를 위해 사용자 유형을 포크 할 필요가 없습니다.

사용자가 최대 허용 업로드에 도달하면 서적/새로운보기에 메모를 쓰거나 양식을 사용 중지하려는 경우 일 수 있습니다.

희망이

관련 문제