我在控制器的新操作中想要编写if else逻辑的方式一直存在问题。例如,用户在用户表中有两个不同的fildes,让我们说premium_user和gold_user。我如何写一个if else声明,说明如果用户是高级用户,他可以上传3本书,如果用户是黄金用户,他可以上传无限量的书籍,而他只是一个没有黄金或溢价的用户,他只能上传在我的控制器的新动作中的2本书。谢谢
答案 0 :(得分:1)
答案 1 :(得分: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 action将是相同的,无需在用户类型上进行分叉以进行验证。
如果用户达到允许的最大上传量,您可能希望在自己的图书/新视图中添加备注或停用该表单。
希望这会有所帮助