Ruby on Rails:允许用户输入新信息,或者单击下拉菜单选择现有信息

Jaz*_*azz 9 ruby textbox ruby-on-rails option drop-down-menu

这里有新的ROR程序员.我正在尝试构建一个允许用户填写表单的Web应用程序,在该表单中输入公司信息,然后单击"提交",将输入添加到数据库中.

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

<div class="field">
<%= f.label :company_name %><br />
<%= f.text_field :company_name %>
Run Code Online (Sandbox Code Playgroud)

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

我正在寻找允许用户进入新公司的方法,或者单击下拉菜单并选择现有公司.

目前:如果未在文本框中输入任何内容且未从选项中选择任何选项,则会将其另存为空白.如果输入了某些内容,并且未选择任何选项,则会将其另存为空白.但是,如果输入了某些内容并从下拉列表中选择了某些内容,则会保存下拉选项.

希望我没有让它太混乱.任何帮助都将不胜感激.

提前致谢.

编辑:

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

 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
Run Code Online (Sandbox Code Playgroud)

结束

和表单视图:

<%= 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") %>
Run Code Online (Sandbox Code Playgroud)

新错误现在是:

错误的参数数量(1对2)

提取的来源:<%= label:company_name%>

谢谢你的帮助!

gab*_*lal 4

你的视图中不能有两个同名的参数,因为 Rails 不知道如何处理它们

@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") %>
Run Code Online (Sandbox Code Playgroud)

您的控制器:

@company = Company.new(params[:company])
@company.company_name = params[:new_company_name] unless params[:new_company_name].empty?
Run Code Online (Sandbox Code Playgroud)