2012-07-18 54 views
9

新ROR程序员在这里。我正在尝试构建一个Web应用程序,它允许用户填写表单,在其中输入公司信息,然后通过单击提交将其添加到数据库中。Ruby on Rails:允许用户输入新信息,或点击下拉菜单选择现有信息

目前,如果用户要创建一个新条目,他们会看到几个字段,例如“公司名称”。有一个空白的框让他们放入一家新公司,并在旁边有一个下拉菜单,用户可以使用该菜单查看数据库中的现有公司。

<div class="field"> 
<%= f.label :company_name %><br /> 
<%= f.text_field :company_name %> 

<%= f.label :company_name %><br /> 
<%= f.select(:company_name, Company.all.map {|p| [p.company_name]}.uniq!, :prompt => "Select a Company") %> 

我正在寻找一种方式,让用户输入一个新的公司,或点击下拉菜单并选择一个现有的公司。

目前: 如果没有输入到文本框,从下拉菜单中选择任何选项,它被保存为空白。 如果输入内容,并且未选择任何选项,则将其保存为空白。 但是,如果输入了某些内容并从下拉列表中选择了某个内容,则会保存下拉选项。

希望我还没有做出太混乱。任何帮助都将不胜感激。

在此先感谢。

编辑:

我创建动作现在看起来像这样

def create 
@company = Company.new(params[:company]) 
@company.company_name = params[:new_company_name] unless params[:new_company_name].empty? 

respond_to do |format| 
    if @company.save 
    format.html { redirect_to @company, notice: 'Company was successfully created.' } 
    format.json { render json: @company, status: :created, location: @company } 
    else 
    format.html { render action: "new" } 
    format.json { render json: @company.errors, status: :unprocessable_entity } 
    end 
end 

和形式的看法:现在

<%= label :company_name %><br /> 
<%= text_field :new_company_name %> 

<%= f.label :company_name %><br /> 
<%= f.select(:company_name, Company.all.map {|p| [p.company_name]}.uniq!, :prompt => "Select a Company") %> 

新的错误是:

错误的参数数目(1 2)

提取的源: <%=标签:COMPANY_NAME%>

感谢您的帮助!

+0

如果用户从下拉列表中选择的东西,还可以键入的东西你能指望什么? – gabrielhilal 2012-07-18 09:47:39

+0

我期望用户输入的输入将是优先的。 – Jazz 2012-07-18 09:50:16

回答

4

不能有两个参数具有相同名称在您看来,铁轨会不知道该怎么跟他们

@rodzyn是正确的,所以请给学分给他..:)

只是为了澄清:

表单:

<%= label_tag :new_company_name, "Company name" %><br /> 
<%= text_field_tag :new_company_name %> 

<%= f.label :company_name %><br /> 
<%= f.select(:company_name, Company.all.map {|p| [p.company_name]}.uniq!, :prompt => "Select a Company") %> 

你的控制器:

@company = Company.new(params[:company]) 
@company.company_name = params[:new_company_name] unless params[:new_company_name].empty? 
+0

感谢您的帮助gabrielhial和@rodzyn。你能看看我的编辑到我的问题。 再次感谢! – Jazz 2012-07-18 10:42:05

+0

这是我的错......对不起......请删除'[:new_company_name]''前面的'[:company]'',因为它与班级公司无关...... – gabrielhilal 2012-07-18 10:59:37

+0

感谢您支持我。我已经做到了,但仍然得到错误:为公司 未定义的方法'new_company_name”:0xb5424860 和提取的源<%= f.text_field:new_company_name%> 干杯再次 – Jazz 2012-07-18 11:02:27

2

您可以设置

<%= text_field :new_company_name %> 

然后在创建行动

@company = Company.new(params[:company]) 
@company.company_name = params[:new_company_name] unless params[:new_company_name].empty?