ROR Collection_select将空值返回给控制器

时间:2014-05-09 00:50:33

标签: ruby-on-rails

我遇到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。谁能告诉我我做错了什么?

1 个答案:

答案 0 :(得分:1)

你在这里弄乱 Collection_select 。从 API 开始,param的第一个collection_select应该是object。在您的情况下,它是Sugarcreamlead object。您还在f中使用了 form_for ,并且您写了l.labell.collection_slelect而不是f.labelf.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>
相关问题