css - View 助手中的 Rails 条件 CSS

标签 css ruby-on-rails-4 helper

我有一个简单的 Rails 应用程序,我正在尝试编写一个执行以下操作的 View 助手。

比较两个值。如果 current_month 金额大于预测金额,则将文本设为绿色。如果 current_month 金额小于预测金额,则将文本设为红色。

我编写了这个简单的帮助程序来将文本附加到 rails 方法的输出,但我不确定如何将 CSS/样式注入(inject)其中。

def target_hit(forecast, current)
  (if current.amount > forecast.amount
    number_to_currency(current.amount.to_s) + " Yay"
  elsif current.amount < forecast.amount
    number_to_currency(current.amount.to_s) + " No dice"
  end).html_safe
end

我在后端相当精通,但在涉及前端方面时,我遇到了很多麻烦。任何帮助将不胜感激。

示例 View 代码

<p class='total'>Current: <%= target_hit(@forecast, @current) %></p>

最佳答案

rails 助手 content_tag http://apidock.com/rails/ActionView/Helpers/TagHelper/content_tag , 很有用,意味着您不必使用 html_safe。我尝试将所有逻辑从 View 移至助手,以使 View 易于阅读,例如

def target_hit(current_amt, forecast_amt)
  content_tag(:p, "#{number_to_currency(current_amt.to_s)} target_content(current_amt, forecast_amt)", class: "total #{target_class(current_amt, forecast_amt)}")
end

def target_content(current_amt, forecast_amt)
  forecast_reached?(current_amt, forecast_amt) ? "Yay" : "No dice"
end

def target_class(current_amt, forecast_amt)
  forecast_reached?(current_amt, forecast_amt) ? "green" : "red"
end

def forecast_reached?(current_amt, forecast_amt)
  current_amt >= forecast_amt
end

在 View 中,您只需调用辅助方法

<%= target_hit(@current.amount, @forecast.amount) %>

关于css - View 助手中的 Rails 条件 CSS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32018476/

相关文章:

ruby-on-rails - after_touch 回调被多次触发

ruby-on-rails - 设置局部变量 rspec helper

c - 相同的二进制搜索在一种情况下不起作用,但在另一种情况下工作

ruby-on-rails - Rails PostgreSQL 数组无法迭代

javascript - 如何将 div 元素定位到背景上的确切点

javascript - 通过jquery制作div,需要它们也向上移动,就像在游戏中一样

jQuery 窗口大小

javascript - 在 Wordpress 网站上执行自定义 css 后 JS 无法正常工作

ruby-on-rails - 在 json 输出 Grape 和 Rabl 中添加自定义键值对

sql - 将 SQL 查询转化为 ActiveRecord Relation