我目前有一个名为Subscribed_date
的属性,但现在在一个人订阅后它没有了。考虑到没有逻辑与属性交互,这是有道理的。但是,我不希望此属性仅在订阅时设置日期,而在续订时也是如此。所以需要这样 - 1.每次用户订阅时,他们只订阅了一年。
2.因此,这个属性会在他们订阅时设置,并在年度结束后续订时重置。
基本上它需要是动态的,而不仅仅是设置为created_at属性,我想我很难理解如何做到这一点。任何帮助都会很棒。
class SubscribersController < ApplicationController
helper_method :sort_column, :sort_direction
def index
@search = Subscriber.search(params[:q])
@subscriber = @search.result
@search.build_condition if @search.conditions.empty?
@search.build_sort if @search.sorts.empty?
end
def new
@subscriber = Subscriber.new
end
def create
@subscriber = Subscriber.create(subscriber_params)
if @subscriber.save
flash[:notice] = "Subscriber Has Been Successfully Created"
redirect_to new_subscriber_path(:subscriber)
else
render "new"
end
end
create_table "Subscribers", force: :cascade do |t|
t.string "first_name"
t.string "last_name"
t.string "email"
t.string "phone_number"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.integer "visit"
t.integer "mug_number"
t.date "subscription_date"
end
class Subscriber < ActiveRecord::Base
before_create :generate_mug_number
scope :subscribing, -> {where subscription_date > 1.year.ago}
scope :non_subscribing, -> {where.not subscription_date > 1.year.ago}
has_many :comments
VALID_EMAIL_REGEX = /\A[\w+\-.]+@[a-z\d\-]+(\.[a-z]+)*\.[a-z]+\z/i
VALID_PHONE_REGEX = /\d{10}/
validates :first_name, presence: true
validates :last_name, presence: true
validates :email, :presence => true, :uniqueness => true, :format => VALID_EMAIL_REGEX
validates :phone_number, :presence => true, :uniqueness => true, :numericality => true, :format => VALID_PHONE_REGEX
def date_joined
created_at.strftime("%-m/%-d/%-y")
end
def expiration_date
(created_at + 1.year).strftime("%-m/%-d/%-y")
end
def days_till_expired
((created_at + 1.year) - DateTime.now).to_i / 1.day
end
def subscribing?
subscription_date > 1.year.ago
end
private
def generate_mug_number
last_number = Subscriber.maximum(:mug_number) || 0
self.mug_number = last_number + 1
end
end
正如你所看到的,一切都很基础。如果您需要更多信息,请告诉我。谢谢!
答案 0 :(得分:1)
我想你可以这样做。
def create
@subscriber = Subscriber.new(subscriber_params) # create method will directly save it, so you're checking if @subcriber.save for nothing
# I've changed it to new
if @subscriber.save
#if the record is saved successfully, it next we'll update the time
@subscriber.touch(:subscription_date) #this will update and save it.
flash[:notice] = "Subscriber Has Been Successfully Created"
redirect_to new_subscriber_path(:subscriber)
else
render "new"
end
end
同样,您可以在续订操作上执行touch
,该操作将存储续订当天的当前日期并进行更新。