在每次迭代中创建Campaign的新实例

时间:2016-07-25 14:50:27

标签: ruby-on-rails

我正在开发一种功能,通过这种功能显示一个包含记录的表格,每个记录都带有单选按钮拒绝和批准。用户选择适当的单选按钮并按下进程。控制权传递给process_campaigns。从这里它分解数据并分析每个记录的状态。如果它被批准,它会重定向到批准块,同样拒绝。

传递以下参数:

Parameters: {"utf8"=>"✓", "authenticity_token"=>"9TCExvCmDahAWGQloPdaRkSowbBaxZGwZnRa8sbNkWM=", "campaign"=>{"2"=>{"start_date"=>"2016-07-18 15:43:00", "end_date"=>"2016-10-15 12:20:00", "merchant_revenue"=>"10", "status"=>"Approved", "notes"=>""}, "1"=>{"start_date"=>"2016-07-15 12:20:00", "end_date"=>"", "merchant_revenue"=>"10", "status"=>"Approved", "notes"=>""}}, "Commit"=>"Process"}

def process_campaign
  authorize! :operator, current_user.operator 
  params[:campaign].each do |key, value|
    if value[:status] == "Approved"
      redirect_to approve_operator_campaign_path(key), :id => key, :start_date => value[:start_date], :revenue_mode => value[:revenue_model], :end_date =>  value[:end_date], :active => true, :status => 307 and return 
    elsif value[:status] == "Rejected"
      redirect_to reject_operator_campaign_path(key), campaign_name: key, notes: value[:notes], :status => 307 and return 
    end
  end
  redirect_to operator_campaigns_path, flash: { notice: "Campaigns have been processed."}
end

def reject
  authorize! :operator, current_user.operator
  params[:campaign].each do |key, value|
    if value[:status] = "Rejected"
      @campaign = Campaign.active.where(id: key, operator_id: current_user.operator_id).last!
      @campaign.data.merge!({:notes=>value[:notes]})
      @campaign.status = "Rejected"
      @campaign.save(validate: false)
    end
  end
end

def approve
  @campaign = Campaign.find(params[:id])
  params[:campaign].each do |key, value|
    if value[:status] = "Approved"
      @applied_campaign = AppliedCampaign.new(:campaign_id => key, :start_date => value[:start_date]||Time.now, :end_date =>  value[:end_date], :active => true)
    end
  end
end

问题是当传递控制权以批准或拒绝整个活动字符串传递时,其中包含两个记录,而我想分离每个记录并单独传递它。任何人都可以说明为什么要传递整个广告系列字符串吗?

1 个答案:

答案 0 :(得分:0)

将params移动到路径助手

redirect_to approve_operator_campaign_path(key, param_1: 1, param_2: 2)
# Parameters: { "id"=>"2" "param_1"=>"1", "param_2"=>"2" }

将您的方法更改为:

def process_campaign
  authorize! :operator, current_user.operator 
  params[:campaign].each do |key, value|
    if value[:status] == "Approved"
      redirect_to approve_operator_campaign_path(key, id: key, start_date: value[:start_date], revenue_mode: value[:revenue_model], end_date:  value[:end_date], active: true, status: 307) and return 
    elsif value[:status] == "Rejected"
      redirect_to reject_operator_campaign_path(key, campaign_name: key, notes: value[:notes], status: 307) and return 
    end
  end
  redirect_to operator_campaigns_path, flash: { notice: "Campaigns have been processed."}
end