当用户在_form中检查:good
时,如何在侧边栏中将该结果的字体颜色呈绿色?
我们在索引中完成了这项工作:How to Change Font Color based on Conditional?。
但是侧边栏逻辑通过在我尝试这个时为每个结果呈现额外的量化/结果而变得更加棘手(我们试着在这里解决这个问题:How to stop double rendering in sidebar?):
<% @averaged_quantifieds.each do |averaged| %>
<% averaged.results.each do |result| %>
<% if result.good == true %>
<div class="green">
<li>
<%= raw averaged.tag_list.map { |t| link_to t.titleize, tag_path(t) }.join(', ') %><%= link_to edit_quantified_path(averaged) do %> <%= averaged.results.first.result_value %> <%= averaged.metric %> <span class="label label-info"> <%= averaged.results.first.date_value.strftime("%b") %></span><% end %>
</li>
<% else %>
<div class="red">
<li>
etc...
当前代码:
<% @averaged_quantifieds.each do |averaged| %>
<li>
<%= raw averaged.tag_list.map { |t| link_to t.titleize, tag_path(t) }.join(', ') %><%= link_to edit_quantified_path(averaged) do %> <%= averaged.results.first.result_value %> <%= averaged.metric %> <span class="label label-info"> <%= averaged.results.first.date_value.strftime("%b") %></span><% end %>
</li>
<% end %>
<% @instance_quantifieds.each do |instance| %>
<li>
<%= instance.results.first.date_value.strftime("%b %d") %>: <%= link_to edit_quantified_path(instance) do %> <%= instance.results.first.result_value %> <%= instance.metric %>, <%= raw instance.tag_list.map { |t| link_to t.titleize, tag_path(t) }.join(', ') %><% end %>
</li>
<% end %>
application_controlller
def set_stats
@quantifieds = Quantified.joins(:results).all
@averaged_quantifieds = current_user.quantifieds.averaged if current_user
@instance_quantifieds = current_user.quantifieds.instance if current_user
@statsresults = current_user.results.stats if current_user
end
更新
quantified.rb
class Quantified < ActiveRecord::Base
belongs_to :user
has_many :results #correct
has_many :comments, as: :commentable
accepts_nested_attributes_for :results, :reject_if => :all_blank, :allow_destroy => true #correct
scope :averaged, -> { where(categories: 'Averaged') }
scope :instance, -> { where(categories: 'Instance') }
scope :private_submit, -> { where(private_submit: true) }
scope :public_submit, -> { where(private_submit: false) }
validates :categories, :metric, presence: true
acts_as_taggable
CATEGORIES = ['Averaged', 'Instance']
end
&#13;
量化控制器
class QuantifiedsController < ApplicationController
before_action :set_quantified, only: [:show, :edit, :update, :destroy]
before_action :logged_in_user, only: [:create, :destroy]
def index
if params[:tag]
@quantifieds = Quantified.tagged_with(params[:tag])
else
@quantifieds = Quantified.joins(:results).all
@averaged_quantifieds = current_user.quantifieds.averaged
@instance_quantifieds = current_user.quantifieds.instance
end
end
def show
end
def new
@quantified = current_user.quantifieds.build
end
def edit
end
def create
@quantified = current_user.quantifieds.build(quantified_params)
if @quantified.save
redirect_to quantifieds_url, notice: 'Quantified was successfully created'
else
@feed_items = []
render 'pages/home'
end
end
def update
if @quantified.update(quantified_params)
redirect_to quantifieds_url, notice: 'Goal was successfully updated'
else
render action: 'edit'
end
end
def destroy
@quantified.destroy
redirect_to quantifieds_url
end
private
def set_quantified
@quantified = Quantified.find(params[:id])
end
def correct_user
@quantified = current_user.quantifieds.find_by(id: params[:id])
redirect_to quantifieds_path, notice: "Not authorized to edit this goal" if @quantified.nil?
end
def quantified_params
params.require(:quantified).permit(:categories, :metric, :date, :comment, :private_submit, :tag_list, results_attributes: [:id, :result_value, :date_value, :good, :_destroy])
end
end
&#13;
结果模型
class Result < ActiveRecord::Base
belongs_to :user
belongs_to :quantified
has_many :comments, as: :commentable
default_scope { order('date_value DESC') }
scope :good, -> { where(good: true) }
scope :good_count, -> { good.count }
end
&#13;
感谢您的时间和专业知识。
答案 0 :(得分:2)
您可以这样做:
<% averaged.results.each do |result| %>
<div class="<%= result.good? ? 'green' : 'red' %>">
在Rails中,ActiveRecord会自动为每个布尔字段定义一个方法,该方法始终返回true
或false
(从不nil
):
# example
# User's boolean attribute 'is_admin' in the DB
# Rails will define an instance method called `is_admin?`:
User.new(is_admin: true).is_admin? # => true
User.new(is_admin: false).is_admin? # => false
User.new(is_admin: nil).is_admin? # => false
# the defined method's name is `<boolean_attribute_name>?`
此外,您不需要像这样明确:
if result.good == true
#etc.
end
你可以写:
if result.good
#etc.
end
如果result.good
返回false
或nil
,则不会进入if块。如果它返回除false
或nil
以外的任何内容,它将执行if块。