1

我在控制器的新操作中编写 if else 逻辑的方式一直存在问题。例如,一个用户在用户表中有两个不同的字段,让我们说 premium_user 和 gold_user。我将如何编写 if else 语句,说明如果用户是高级用户,他可以上传 3 本书,如果用户是黄金用户,他可以上传无限量的书籍,而他只是一个没有黄金或高级用户的用户,他只能上传我的控制器的新动作中有 2 本书。谢谢

4

2 回答 2

1

逻辑属于您的模型。您可能会设置一个STI 表来定义您的用户(白银、黄金、普通人……)并使用例如CanCan管理授权。

从那里,您只需要根据用户的类型更新您的视图。

于 2012-05-31T12:24:17.307 回答
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 操作将相同,无需分叉用户类型进行验证。

如果用户达到最大允许上传,也许您想在您的书籍/新视图中添加注释或禁用表单。

希望这可以帮助

于 2012-05-31T13:27:30.573 回答