【问题标题】:Rails create record with status published if all parameters are set如果设置了所有参数,Rails 创建状态为已发布的记录
【发布时间】:2021-02-15 00:10:32
【问题描述】:

我的事件模型有以下字段:

  create_table "group_events", force: :cascade do |t|
    t.date "start_date", null: false
    t.date "end_date
    t.string "name"
    t.string "description"
    t.string "status", default: "draft"

我有一个要求,即活动应该是草稿或发布的。要发布所有字段都是必需的,可以在发布之前只保存一部分字段。如何识别记录应该保存为草稿还是发布?

  def create_event
    Event.create!(
      start_date: params[:start_date],
      end_date: params[:end_date],
      name: params[:name],
      description: params[:description],
      user_id: params[:user_id]
    )
  end

我应该计算参数并根据create_event 方法中的设置状态,还是有更好的方法?

【问题讨论】:

  • 如果所有属性都存在,应该将事件状态自动设置为published,还是应该由用户决定何时发布事件??
  • @ArunKumarMohan 所有要求都在帖子中,我不知道其他任何内容。可能它应该自动设置为已发布。

标签: ruby-on-rails ruby


【解决方案1】:

如果事件可发布,您可以注册before_saveActiveRecord callback 以将状态设置为published


# app/models/event.rb

class Event < ApplicationRecord
  before_save :set_status

  private

  def set_status
    self.status = 'published' if publishable?
  end

  def publishable?
    [
      name,
      description,
      end_date
    ].all?(&:present?) # Add other fields as required. `start_date` is omitted since it's required.
  end
end

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-05-25
    • 1970-01-01
    • 2019-07-26
    • 1970-01-01
    • 1970-01-01
    • 2016-12-03
    • 1970-01-01
    • 2018-08-11
    相关资源
    最近更新 更多