2016-09-18 37 views
0

我在我的运动应用程序中添加圆形图很困难。 是否可以将morris.js值设置为来自我的控制器的变量? 我有@diet_calories变量在控制器中,我想显示碳水化合物 - >蛋白质 - >脂肪在60% - > 20% - > 20%的关系。如果我在脚本标记中设置碳水化合物值(value:@diet_calories * 0.6),则无法工作。 你有解决这个问题的一些建议吗?如何从Rails控制器设置morris.js值

application.html.erb:

<script> 
    new Morris.Donut({ 
     element: 'diet-circle', 
     data: [ 
      { label: "Carbs", value: @diet_calories * 0.6 }, 
      { label: "Protein", value: @diet_calories * 0.2 }, 
      { label: "Fat", value: @diet_calories * 0.2 } 
     ] 
    }); 
</script> 

info_controller.rb:

def diet 
    if current_user.activity == "Sedentary" 
     if current_user.goals == "Lose Weight" 
      @diet_calories = ((@bmr * 1.1) - 300).to_i 
     elsif current_user.goals == "Maintain Weight" 
      @diet_calories = (@bmr * 1.1).to_i 
     elsif current_user.goals == "Add some weight" 
      @diet_calories = ((@bmr * 1.1) + 300).to_i 
     end 
    elsif current_user.activity == "Low" 
     if current_user.goals == "Lose Weight" 
      @diet_calories = ((@bmr * 1.5) - 300).to_i 
     elsif current_user.goals == "Maintain Weight" 
      @diet_calories = (@bmr * 1.5).to_i 
     elsif current_user.goals == "Add some weight" 
      @diet_calories = ((@bmr * 1.5) + 300).to_i 
     end 
    elsif current_user.activity == "Medium" 
     if current_user.goals == "Lose Weight" 
      @diet_calories = ((@bmr * 1.7) - 300).to_i 
     elsif current_user.goals == "Maintain Weight" 
      @diet_calories = (@bmr * 1.7).to_i 
     elsif current_user.goals == "Add some weight" 
      @diet_calories = ((@bmr * 1.7) + 300).to_i 
     end 
    elsif current_user.activity == "High" 
     if current_user.goals == "Lose Weight" 
      @diet_calories = ((@bmr * 2.1) - 300).to_i 
     elsif current_user.goals == "Maintain Weight" 
      @diet_calories = (@bmr * 2.1).to_i 
     elsif current_user.goals == "Add some weight" 
      @diet_calories = ((@bmr * 2.1) + 300).to_i 
     end 
    end 

diet.html.erb:

<div id="diet-circle"></div> 

回答

1

您可以通过在你的application.html.erb使这一变化 实现这一目标,

<script> 
    var diet_calories = <%= @diet_calories %> 
    new Morris.Donut({ 
    element: 'diet-circle', 
    data: [ 
     { label: "Carbs", value: diet_calories * 0.6 }, 
     { label: "Protein", value: diet_calories * 0.2 }, 
     { label: "Fat", value: diet_calories * 0.2 } 
    ] 
    }); 
</script> 

为了进一步了解变量的传递从导轨的javascript,看看this railscast.

+0

大。谢谢你的回答;) – Morgan

1

试用:

<script> 
    new Morris.Donut({ 
     element: 'diet-circle', 
     data: [ 
      { label: "Carbs", value: <%= @diet_calories %> * 0.6 }, 
      { label: "Protein", value: <%= @diet_calories %> * 0.2 }, 
      { label: "Fat", value: <%= @diet_calories %> * 0.2 } 
     ] 
    }); 
</script> 

.erb代表嵌入式RuBy。 在.erb文件,以评估Ruby代码(例如使用控制器设置实例变量),你需要使用<%= ruby code %>

您可以读取介绍Erb的模板here

+0

我完美的工作。感谢您的帮助;) – Morgan

+0

@SzymonRadosz很高兴帮助你:) – NickGnd