我有一个正在保存的主要对象。现在我在潜在客户和广告系列之间添加了一个has_one关联。广告系列有一个主角,其中主要广告系列具有外键campaign_id。我的模型中有以下内容:
class Campaign < ActiveRecord::Base
has_one :lead
end
class Lead < ActiveRecord::Base
belongs_to :campaign
end
在我的线索控制器中创建动作我有:
def create
campaign = Campaign.find_by id: params[:campaign_id]
@lead = campaign.build_lead lead_params
if @lead.save
redirect_to lead_path
else
end
end
永远不会保存潜在客户。它不在数据库中。即使if条件通过,它的id值也是nil。我也试过@ lead.save!和@ lead.save(验证:false)。我怎样才能弄清楚错误是什么?
为了实现这一点,我必须删除Lead模型中的belongs_to:campaign。我必须像这样保存它:
campaign = Campaign.find_by_id(params[:campaign_id].to_i)
@lead = Lead.new lead_params
if @lead.save
@lead.campaign_id = campaign.id
@lead.save!
答案 0 :(得分:0)
我认为您需要保存campain
,而不是@lead
...
保存campain
时,它还会保存其嵌套对象并保持关系。
所以试试吧:
def create
campaign = Campaign.find_by id: params[:campaign_id]
@lead = campaign.build_lead lead_params
if campain.save
redirect_to lead_path
else
end
end
答案 1 :(得分:0)
如果您只是保存一个&#34;普通&#34; Lead
,为什么不尝试以下方法:
-
#config/routes.rb
resources :campaigns do
resources :leads
end
#app/controllers/leads_controller.rb
class LeadsController < ApplicationController
def new
@campaign = Campaign.find params[:campaign_id]
@lead = @campaign.build_lead
end
def create
@campaign = Campaign.find params[:campaign_id]
@lead = @campaign.lead.new lead_params
if @lead.save
end
end
private
def lead_params
params.require(:lead).permit(:lead, :attributes)
end
end
#app/models/lead.rb
class Lead < ActiveRecord::Base
# validations etc
end
#app/views/leads/new.html.erb
<%= form_for @lead do |f| %>
<%= f.text_field :lead %>
<%= f.text_field :attributes %>
<%= f.submit %>
<% end %>
这应该工作如果你将领导作为普通对象传递(IE不是Campaign
对象的嵌套属性)。您可能遇到的其他问题将包括您的验证,以防止Lead
被保存,或者您的参数未被构建&amp;发送正确
如果上述内容对您不起作用,我建议您上传params
行动中收到的new
- 如果您收到这些内容,我们就会在一个更强大的位置,以帮助你辨别正在发生的事情。