我遇到collection_select
的返回值问题。在视图中它正在正确显示,但是当它提交时,值为nil。我不确定我做错了什么。
这是我的代码。
在我对new.html.erb
的观看中,控制器为crm_controller
<%= form_for @sugarcrmlead, :html => {:class => "form-lead top_margin"} do |f| %>
<%= form_for @lead do |l| %>
<div class="required">
<table align="center" width="100%" cellpadding="0" cellspacing="0" border="0">
<td><%= f.label :lbl, "Lead's Company*" %>:</td><td><%= f.text_field :account_name, :class => 'form-control' %></td>
<td><%= l.label :lbl, "Conference " %>:</td>
<td><%= l.collection_select :conf_name, @conferences ,:to_s , :to_s ,:include_blank =>"select Conference" ,:class => 'form-control' %></td></tr>
我的控制器代码:
def new
@sugarcrmlead = Sugarcrmlead.new
@conferences = Conference.pluck(:name)
@conf = Conference.new
@lead = Lead.new
end
def create
@sugarcrmlead = Sugarcrmlead.new(sugarcrmlead_params)
@lead = Lead.new
if params[:commit] == 'Create Lead'
first_name = params[:sugarcrmlead][:first_name]
last_name = params[:sugarcrmlead][:last_name]
title = params[:sugarcrmlead][:title]
department = params[:sugarcrmlead][:department]
account_name = params[:sugarcrmlead][:account_name]
phone_work = params[:sugarcrmlead][:phone_work]
phone_mobile = params[:sugarcrmlead][:phone_mobile]
phone_fax = params[:sugarcrmlead][:phone_fax]
website = params[:sugarcrmlead][:website]
conference_name = params[:conf_name]
leads_conference_id = Conference.select(:id).where(:name => conference_name)
@crminfo = User.find_by_id(session[:user_id])
crm_u = @crminfo.crm_username
crm_p = @crminfo.crm_password
..
....
more code
....
leadInfo = sugarcrmlead.leads
if sugarcrmlead
flash[:success] = "Successfully added new lead "
@lead.lead_id = leadInfo.last.id
@lead.conference_id = leads_conference_id
@lead.user_id = session[:user_id]
@lead.lead_first_name = first_name
@lead.lead_last_name = last_name
@lead.save #saves to local
redirect_to new_sugarcrmlead_path
end
else
flash[:error] = "Missing Required Fields!"
redirect_to new_sugarcrmlead_path
end
end
end`
我在视图中有两个表单的原因是因为我将此信息保存到2个不同的数据库中。一个在线,一个在本地。当我检查本地数据库(LEAD)时,会议ID为空。我打印出了conference_name = params[:conf_name]
的价值
leads_conference_id = Conference.select(:id).where(:name => conference_name)
我注意到它为空。这是一回事。我视图中的参数:conf_name
不在数据库中。我在Leads模型中将其声明为attr_accessor :conf_name
。谁能告诉我我做错了什么?
答案 0 :(得分:1)
你在这里弄乱 Collection_select
。从 API 开始,param
的第一个collection_select
应该是object
。在您的情况下,它是Sugarcreamlead object
。您还在f
中使用了 form_for
,并且您写了l.label
和l.collection_slelect
而不是f.label
和f.collection_select
这应该有效
<td><%= f.label :lbl, "Conference " %>:</td>
<td><%= f.collection_select :sugarcreamlead,:conf_name, @conferences ,:id , :name,:prompt =>"select Conference" ,:class => 'form-control' %></td></tr>