1

コントローラーの新しいアクションで if else ロジックを書きたい方法に問題がありました。たとえば、ユーザーがユーザー テーブルに 2 つの異なるファイルを持っているとします。たとえば、premium_user と gold_user とします。ユーザーがプレミアムユーザーの場合は3冊の本をアップロードでき、ユーザーがゴールドユーザーの場合は無制限の本をアップロードでき、ゴールドまたはプレミアムのないユーザーはアップロードのみできるというif elseステートメントをどのように記述しますかマイコントローラーの新アクションで2本。ありがとうございました

4

2 に答える 2

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ブック経由で送信する場合でも、検証が正しく動作するように、 で新しいブックを作成してください。

コントローラーの new または create アクションは同じであり、検証のためにユーザー タイプを fork する必要がないことに注意してください。

ユーザーが最大許容アップロードに達した場合は、ブック/新しいビューにメモを入れたり、フォームを無効にしたりすることができます。

お役に立てれば

于 2012-05-31T13:27:30.573 に答える
1

ロジックはモデルに属します。おそらく、ユーザー (シルバー、ゴールド、通常の人々など) を定義するSTI テーブルをセットアップし、たとえばCanCanで承認を管理するでしょう。

そこから、ユーザーのタイプに基づいてビューを更新するだけです。

于 2012-05-31T12:24:17.307 に答える