在一周的特定日期显示WOD

时间:2017-08-06 10:56:38

标签: ruby-on-rails ruby model-view-controller

我正在创建一个应用程序,用户可以看到培训师告诉他要做的当天锻炼。这项训练将在应用程序的主页上进行。

训练师每周上传一次,我想每天只展示一次。

我认为如果我给WOD模型一个名为wday的整数属性,那么我可以做逻辑如果Wod.wday == Date.today.cwday我会实现这个。这根本不起作用,我的static_pages控制器出错了。

下面是代码:

Wod模特:

<?php
    $arr1 = $your_initial_array;
    $arr2 = array_push($arr1, $your_values);
    $arr3 = array();
    $topop = 0;
    for($x = 0; $x < count($arr2); $x++) {
        for($i = 0; $i < count($arr2); $i++) {
            if(strtotime($arr2[$i]['post_date'] > $latest) { // or < if you want
                $topop = $i;
            }
        }
        array_push($arr3, $arr2[$topop]);
        unset($arr2[$topop]);
    }

用户模型:

class Wod < ApplicationRecord
belongs_to :user

  def this_day
    Date.today.cwday == self.wday
  end

end

静态页面控制器:

class User < ApplicationRecord
has_many :wods   

 def feed
  Wod.this_day
 end

我收到以下错误:

  

StaticPagesController中的NoMethodError #home undefined方法   `this_day'代表#&lt; Class:0x007f5870c1e7b8&gt;你的意思是?第三

我想知道如何完成这项任务,我们将不胜感激!

顺便说一句:如果我在用户模型Wod.all中这样做很有效,但我不想要这个

2 个答案:

答案 0 :(得分:1)

  

StaticPagesController中的NoMethodError #home undefined方法   `this_day&#39;对于#&lt; Class:0x007f5870c1e7b8&gt;

问题在于Wod.this_day。如果您想在this_day上致电WOD,则需要将其添加为class方法。

更改

def this_day
  Date.today.cwday == self.wday
end

def self.this_day
  Date.today.cwday == wday
end

替代解决方案是使用scopes

class Wod < ApplicationRecord
  belongs_to :user
  scope :this_day, -> { where(wday: Date.today.cwday) }
end

答案 1 :(得分:0)

我通过将方法this_day更改为:

来修复它
def self.this_day
  where("wday = ?", Date.today.cwday)
end