I am using form_for in order to create a new entry.
In the controller I set:
def create_ab_campaign
@campaign = Campaign.find_by(id: params[:id], account_id: current_account.id)
@campaign_id = params[:id]
end
In the view I do:
<%= form_for (@campaign), :url => {:controller => "campaigns", :action => "create_new_ab_campaign"} do |f| %>
<div class="form-group">
<%= f.label :name, "name", class: "control-label" %>
<%= f.text_field :name, class: "form-control", placeholder: "name" %>
</div>
<%= f.submit "Save Settings" %>
On submit I want to create a new entry instead of updating the existing one.
I did the following in the controller:
def create_ab_campaign_new
@campaign_new = Campaign.new(create_a_new_ab_campaign)
if @campaign_new.save
redirect_to(:controller =>"campaigns", :action =>"index")
else
redirect_to(:action =>"new")
end
end
private
def create_a_new_ab_campaign
params.require(:campaign).permit(:name)
end
I get the following: NoMethodError in CampaignsController#update
It tries still to use the update instead of "create_a_new_ab_campaign"
I used the update for updating records - this works all fine.
def update
@campaign = Campaign.find_by(id:params[:id], account_id: current_account.id)
@new = create_new_campaign
if @campaign.update_attributes(@new)
redirect_to(:controller =>"campaigns", :action =>"index")
else
render 'edit'
end
end
But as described instead of an update/edit I want to do another case and create a new entry out of the record.
Thanks a lot for your help!
UPDATE:
Full error log:
NoMethodError in CampaignsController#update undefined method `update_attributes' for nil:NilClass
Extracted source (around line #124): 122 123 124 125 126 127
@new = create_new_campaign
@new[:page_type].delete_if{ |x| x.empty? }
if @campaign.update_attributes(@new)
redirect_to(:controller =>"campaigns", :action =>"index")
else
render 'edit'
Rails.root: /Users/sschindler/demostore
Application Trace | Framework Trace | Full Trace app/controllers/campaigns_controller.rb:124:in `update'
Update routes
Routes:
post "campaigns/create_new_ab_campaign"
get "campaigns/create_new_ab_campaign"
post "/campaigns/:id/edit" => "campaigns#edit"
get "/campaigns/:id/edit" => "campaigns#edit"
post "/campaigns/create_ab_campaign" => "campaigns#create_ab_campaign"
get "/campaigns/create_ab_campaign" => "campaigns#create_ab_campaign"
post "/campaigns/:id" => "campaigns#edit"
post "/campaigns/:id" => "campaigns#new"
get "/campaigns/:id" => "campaigns#edit"
get 'campaigns/show'
get 'campaigns/index'
post '/campaigns/edit'
get '/campaigns/edit'