Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/http/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 将数组排序为数组描述的条件方法?_Ruby On Rails_Ruby_Methods_Model - Fatal编程技术网

Ruby on rails 将数组排序为数组描述的条件方法?

Ruby on rails 将数组排序为数组描述的条件方法?,ruby-on-rails,ruby,methods,model,Ruby On Rails,Ruby,Methods,Model,在您的帮助下,如何使下面找到的当前视图看起来像视图 当前视图: <%= challenge.action %> <% @challenge.committed.map { |d| d.titleize[0,3] }.each do |title| %> <%= title %> <% end %> # EXAMPLES # Run Sun, Mon, Tue, Wed, Thu, Fri, Sat # Meditate Sun,

在您的帮助下,如何使下面找到的当前视图看起来像视图

当前视图:

<%= challenge.action %>
<% @challenge.committed.map { |d| d.titleize[0,3] }.each do |title| %>
  <%= title %> 
<% end %>

# EXAMPLES
# Run    Sun, Mon, Tue, Wed, Thu, Fri, Sat
# Meditate    Sun, Sat
# Do a Random Act of Kindness    Mon, Tue, Wed, Thu, Fri
challenge.rb:

class Challenge < ActiveRecord::Base
  serialize :committed, Array

  def committed_wdays
    committed.map do |day|    
      Date::ABBR_DAYNAMES.index(day.titleize)
    end
  end
end

如果您想知道这是一个什么样的好标签,请专门为此编写一个方法:

WEEKDAYS = %w[ mon tue wed thu fri ]
WEEKENDS = %w[ sat sun ]
DAYS = WEEKDAYS + WEEKENDS

def committed_description
  case DAYS & self.committed
  when DAYS
    'everyday'
  when WEEKDAYS
    'weekdays'
  when WEEKENDS
    'weekends'
  else
    self.commited.join(', ')
  end
end
Ruby可以直接比较array和array,看看它们是否相等,并将其分支到适当的部分。这很方便

值得注意的是,使用数组进行此操作非常费力。您可能希望使用较短的符号,为每天指定一个唯一的字母,并将其视为描述。例如:
MTWHFSU
是一种常见的映射,周四的
H
和周日的
U
是异常


与简单的字符串对应项相比,序列化列的工作速度非常慢。您只需获取一个字符串,而不是比较数组和数组,而是比较字符串和字符串,而不是每次读取时序列化/取消序列化。这样效率更高。作为奖励,这些字符串可以整齐地编入索引。

您是否试图解决
提交的描述部分?这不仅是速度,而且是简单。拥有这样一种紧凑、规范的数据存储方式有助于开发和调试。由于
sort
问题,我已经修复了这里的示例。强制执行
天&
将使它们每次都按正确的顺序排列,并具有丢弃任何非天数据的额外好处。谢谢您,先生!我将在某个时候进行调整。我觉得我解决的每一个问题都会有三个弹出窗口。我想这就是程序员的生活。
class Challenge < ActiveRecord::Base
  serialize :committed, Array

  def committed_wdays
    committed.map do |day|    
      Date::ABBR_DAYNAMES.index(day.titleize)
    end
  end
end
t.text     "committed",       default: "---\n- sun\n- mon\n- tue\n- wed\n- thu\n- fri\n- sat\n"
WEEKDAYS = %w[ mon tue wed thu fri ]
WEEKENDS = %w[ sat sun ]
DAYS = WEEKDAYS + WEEKENDS

def committed_description
  case DAYS & self.committed
  when DAYS
    'everyday'
  when WEEKDAYS
    'weekdays'
  when WEEKENDS
    'weekends'
  else
    self.commited.join(', ')
  end
end