【问题标题】:Haml / Rails 4: Conditions - repeating code insideHaml / Rails 4:条件 - 内部重复代码
【发布时间】:2017-01-26 11:34:15
【问题描述】:

我怎样才能用 haml/rails 做这样的事情:

- if current_user.is_seeking_job == true && current_user.is_seeking_contract == true
  - @jobsforyou.where.not(user_id: current_user, is_finished: true, is_active: false).where("sort < ?", 2).limit(10).each do |job|
- else
  - @jobsforyou.where.not(user_id: current_user, is_finished: true, is_active: false).where("sort > ?", 1).limit(10).each do |job|
    %li

显然我收到了一个错误,因为我在第一个循环中没有代码。 问题是我有不止这两个条件,%li 里面有很多代码。

当然,我可以针对每个条件复制它,它会起作用,但是如果不一遍又一遍地复制同一段代码,如何做到这一点呢?

提前感谢您的帮助!

【问题讨论】:

  • 这个问题可能更适合CodeReview,而不是这里。我还建议您发布更完整的代码版本——如果缺少潜在的重要信息,很难给出建议!
  • 根据您发布的代码,显而易见的事情是完全删除无用的循环 - 如果您能阐明为什么不能这样做,您可能会得到更有帮助的答案。
  • @Gugubaight 这个逻辑必须在控制器中处理。在视图中添加此类条件是非常糟糕的做法。
  • 我根据 pdoherty926 的回答将此添加到我的控制器中:)

标签: ruby-on-rails ruby-on-rails-4 haml


【解决方案1】:

您可以执行以下操作:

- if current_user.is_seeking_job && current_user.is_seeking_contract
  - sort_order = "sort < ?"
  - sort_param = 2
- else
  - sort_order = "sort > ?"
  - sort_param = 1
- @jobsforyou.where.not(user_id: current_user, is_finished: true, is_active: false).where(sort_order, sort_param).limit(10).each do |job|

但是,此解决方案违反了separation of concerns principle - 您的视图应该(理想情况下)只显示数据,而不是查询数据库。我建议将查询和相关逻辑移到更合适的位置,例如模型方法或范围。

【讨论】:

  • 非常感谢!我根据您的回答将此添加到我的控制器中:-)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-27
  • 2013-10-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多