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