在rails app中实时显示打开/关闭

时间:2016-10-25 21:42:46

标签: mysql ruby-on-rails ruby

您好,我正在尝试在rails应用程序中创建一个打开或关闭的显示我有两个模型Establishments和Opentimes。这是我的数据库表。我使用MySQL作为我的数据库。

create_table "establishments", force: :cascade, options: "ENGINE=InnoDB DEFAULT CHARSET=utf8" do |t|
  t.string   "name"
  t.string   "tagline"
  t.text     "description",    limit: 65535
  t.string   "postcode"
  t.string   "address_line_1"
  t.string   "address_line_2"
  t.string   "address_line_3"
  t.string   "parish"
  t.string   "phone_number"
  t.integer  "user_id"
  t.datetime "created_at",                   null: false
  t.datetime "updated_at",                   null: false
  t.index ["user_id"], name: "index_establishments_on_user_id", using: :btree
end

create_table "opentimes", force: :cascade, options: "ENGINE=InnoDB DEFAULT CHARSET=utf8" do |t|
  t.integer  "day"
  t.string   "label"
  t.time     "open"
  t.time     "closed"
  t.datetime "created_at",       null: false
  t.datetime "updated_at",       null: false
  t.integer  "establishment_id"
end

我在两个模型之间建立了关系并嵌套了路线。

Rails.application.routes.draw do

 devise_for :users
 resources :establishments do
  resources :opentimes
 end
 root to: "establishments#index"
end

这是我尝试执行的方法,但在我的机构模型中无效。

class Establishment < ApplicationRecord
  belongs_to :user
  has_many :opentimes

 def open?
    day_of_week_number = Time.current.strftime("%u")
    opentime = @opentimes.find_by(day: day_of_week_number)
    if (opentime.open.strftime("%H:%M") >= Time.current.strftime("%H:%M")) && (Time.curent.strftime("%H:%M") < opentime.closed.strftime("%H:%M"))
        'Open'
    else
        'Closed'
    end
 end
end

如果有人能帮助我并指出我正确的方向,我将非常感激。请原谅我,如果我离开这里,我是铁轨和编程的新手。非常感谢提前。

1 个答案:

答案 0 :(得分:0)

您的情况有误并且有错字。编码完全像我用英语说的那样:

如果current_time超过(大于)开放时间,则会打开: Time.current.strftime("%H:%M") >= opentime.open.strftime("%H:%M")

如果current_time在结束时间之前(小于),则会打开: Time.current.strftime("%H:%M") < opentime.closed.strftime("%H:%M")

结合这两个,让我知道它是如何工作的。您的第一个不平等是错误的,并且您在第二个中将current拼写为curent