rails中的简单if else语句

时间:2012-05-31 12:20:26

标签: ruby-on-rails ruby-on-rails-3 ruby-on-rails-3.2

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

2 个答案:

答案 0 :(得分:1)

逻辑属于您的模型。您可能会设置一个STI Table来定义您的用户(银牌,金牌,常客,......)并使用例如CanCan来管理授权。

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

答案 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将是相同的,无需在用户类型上进行分叉以进行验证。

如果用户达到允许的最大上传量,您可能希望在自己的图书/新视图中添加备注或停用该表单。

希望这会有所帮助