在表单中使用相同的输入字段保存值

我在rails中有一个名为info with address:string ,在我看来,我有相同的输入字段,用户可以输入一个值。 inheritance我的form.html

     

我知道不在info表中添加另外一个字段听起来很奇怪,但我正在努力只使用地址列。 我试图在节目中显示两个值,但只显示最后一个,我猜测第一个地址没有保存,但最后一个地址总是保存而不是两者都保存。

我的节目html

 

Addresses:

如何从两个输入字段将两个值保存到表中,并在我的节目中显示它们。 HTML? 如果有人能提供方法或解决方案,我会感激不尽。

UPDATE

 def create address_array = params[:info][:address] address_string = address_array[0] + ', ' + address_array[1] params[:info][:address] = address_string respond_to do |format| if @info.save format.html { redirect_to @info, notice: 'Info was successfully created.' } format.json { render action: 'show', status: :created, info: @info } else format.html { render action: 'new' } format.json { render json: @info.errors, status: :unprocessable_entity } end end end 

如果您不想完全创建两个单独的地址字段,则可以将相同的address参数作为数组传递给两个标记助手中的一个

 <%= f.text_field_tag 'address[]' %> <%= f.text_field_tag 'address[]' %> 

然后,在控制器中,您可以访问两个字段中每个字段的相应值作为数组的成员:

 address_array = params[:address] address_string = address_array[0] + ', ' + address_array[1] # Assigns comma delimited string 

此后,您可以传递address_string作为模型的address属性的值。

如果您不想更改模型模式,那么这种方法有相当大的优势,因为您可以按原样使用address属性 – 您所做的只是修改表单中字段的处理方式,然后处理返回控制器中的值。

更新

params hash可以就地修改,以便params[:info][:address]反映你的自定义字符串,而不是两个字符串的数组:

 def create address_array = params[:address] address_string = address_array[0] + ', ' + address_array[1] params[:info][:address] = address_string # Assigns `address_string` to `params[:info][:address]` # remainder of the `create` logic end 

更新2

您的newcreate controller操作应该类似于:

 def new @info = Info.new end def create address_array = params[:address] address_string = address_array[0] + ', ' + address_array[1] params[:info][:address] = address_string respond_to do |format| # First, instantiate a new instance of `Info` @info = Info.new(params[:info]) # Then, save if @info.save format.html { redirect_to @info, notice: 'Info was successfully created.' } format.json { render action: 'show', status: :created, info: @info } else format.html { render action: 'new' } format.json { render json: @info.errors, status: :unprocessable_entity } end end end 

更新3

如果您在修改params哈希时遇到问题,可能需要尝试直接分配address属性:

 def create address_array = params[:address] address_string = address_array[0] + ', ' + address_array[1] respond_to do |format| @info = Info.new(params[:info]) @info.address = address_string # Assign attribute directly if @info.save # remainder of code 

尝试这样的事情:

 <%= form_for :info do |f| %> <%= f.text_field :address1 %> <%= f.text_field :address2 %> <% end %> 

然后在你的控制器中:

 def create # Look up model object address = "#{params[:info][:address1]} #{params[:info][:address2]}" # save model object with address end 

基本思想是在不使用模型属性的情况下创建表单,然后在控制器中从params哈希中提取所需信息并自己创建列数据。