首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >创建操作后更新数据库不起作用

创建操作后更新数据库不起作用
EN

Stack Overflow用户
提问于 2019-01-23 11:23:59
回答 1查看 62关注 0票数 0

set_bonus(member_id, cookie)方法不工作。我试图更新与self.set_signup_attribution(member_id, cookie, origin)返回的模型相同的内容。

new_has_value变量返回{"currency"=>"usd", "type"=>"flat", "amount"=>1000}

Model.rb

代码语言:javascript
复制
# THIS METHOD WORKS
def self.set_signup_attribution(member_id, cookie, origin)
  return unless cookie.present?
  tracking_code = cookie
  attribution_channel = AttributionChannel.find_by tracking_code: tracking_code
  associated_member_record = Member.find member_id
  if attribution_channel.present?
    Attribution.create!({
      event: Attribution::SIGN_UP,
      attribution_channel: attribution_channel,
      associated: associated_member_record,
      extra: origin
    })
    set_bonus(member_id, cookie)
  else
    Rails.logger.info "Unknown Attribution Channel for tracking code: '#{ tracking_code }'"
  end
end


# THIS METHOD DOES NOT WORK. UPDATES THE DATABASE.
def self.set_bonus(member_id, cookie)
  epoch = Member.find_by(id: member_id).attribution_epoch
  attribution_code = AttributionChannel.find_by(tracking_code: cookie)
  duration_value = attribution_code.attribution_duration.downcase.split(' ')
  duration = duration_value.first.to_i.send(duration_value.last)
  return if cookie.present? && epoch.present?
  current_time = Time.now
  if attribution_code.bonus_config.present?
    if (current_time - epoch).to_i < duration
      hash_value = attribution_code.bonus_config
      new_hash_value = hash_value.assoc("sign_up")[1]
      value = Attribution.where(attribution_channel_id: attribution_code)
      if new_hash_value["type"] == "flat"
        value.update_all(
          bonus_amount: new_hash_value["amount"],
          bonus_currency: new_hash_value["currency"]
        )
      elsif new_hash_value["type"] == "percentage"
        value.update_all(
          bonus_amount: new_hash_value["amount"],
          bonus_currency: new_hash_value["currency"]
        )
      else
        {
          bonus_amount: "Doesn't exist",
          bonus_currency: "Doesn't exist"
        }
      end
    else
      "Do nothing"
    end
  else
    "Do nothing"
  end
  #cookie = nil
  binding.pry
end

Controller.rb

代码语言:javascript
复制
def index
  unless session[:just_signed_up]
    redirect_back_or_settings_page
  end
  Attribution.set_signup_attribution(current_user, cookies[:visit_attr], request.referer)
  Attribution.set_bonus(current_user, cookies[:visit_attr])
  session[:just_signed_up] = false
  @email = current_user.email
end

我该怎么做?这就是我尝试过的,但不起作用。我可以将set_bonus方法合并到set_signup_attribution方法或其他方法吗?

任何帮助都将不胜感激。

,所以进一步钻研这个:

我将set_bonusset_signup_attribution合并,以及两个字段(bonus_amount和bonus_currency),这两个字段是set_bonus方法应该更新的返回nil

代码语言:javascript
复制
Attribution.create!(
  {
    event: Attribution::SIGN_UP,
    attribution_channel: attribution_channel,
    associated: associated_member_record,
    extra: origin
  }.merge(self.set_bonus(member_id, cookie).to_h)
)

通过在set_bonus方法上使用set_bonus之后的这个练习,我发现它起作用了,但是它正在返回nil,我不知道为什么。这可能是因为member_id在模型中是不可用的吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-01-23 13:44:28

if语句中,应该对适当的对象调用set_bonus方法。

代码语言:javascript
复制
    attribution = Attribution.create!({
      event: Attribution::SIGN_UP,
      attribution_channel: attribution_channel,
      associated: associated_member_record,
      extra: origin
    })
    attribution.set_bonus(member_id, cookie) if attribution.persisted?

只是要小心,因为.create!会引发错误,以防出了什么问题,所以也许最好使用

代码语言:javascript
复制
  attribution = Attribution.new(.....)
  if attribution.save
    attribution.set_bonus(.....)
  else
    Rails.logger.info  attribution.errors
  end

我希望这能帮上忙。

干杯

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54326141

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档