我在带有info
的导轨中有一个名为address:string
的模型,在我看来,我有一个输入字段,用户可以输入一个值。继承人我的form.html
<%= form_for(@info) do |f| %>
<%= f.text_field :address %>
<%= f.text_field :address %>
<% end %>
我知道不在info表中添加另一个字段听起来很奇怪,但我正在努力只使用地址列。我试图在节目中显示两个值,但只显示最后一个,我猜第一个地址没有保存,但最后一个地址总是保存而不是两者。
我的节目html
<p>
<strong>Addresses:</strong>
<%= @info.address %>
</p>
如何从两个输入字段将两个值保存到表中,并在我的节目中显示它们。 HTML?如果有人能提供方法或解决方案,我将感激不尽。
更新
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
答案 0 :(得分:1)
尝试这样的事情:
<%= 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
哈希中提取所需信息并自行创建列数据。
答案 1 :(得分:1)
如果您不想完全创建两个单独的地址字段,则可以将相同的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
哈希可以就地修改,以便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 :
您的new
和create
控制器操作应该类似于此:
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