我在/new.html.erb 中有这个形式:
<%= form_for @vendor, multipart: true do |f| %>
<%= f.text_field :name, "Store Name" %>
<%= f.text_field :address, "Store Address" %>
<%= f.file_field :image %>
<%= f.submit "Save", class: "btn btn-success" %>
<% end %>
以及这些供应商方法:
def new
@vendors = Vendor.all
@vendor = Vendor.new
end
def vendor_params
params.require(:vendor).permit(:id, :name, :latitude, :longitude, :address, :image)
end
当我尝试呈现页面时,出现此错误:
undefined method `merge' for "Store Name":String
Extracted source (around line #8):
5: <h4>New Vendor Form</h4>
6:
7: <%= form_for @vendor, :html => {:multipart => true} do |f| %>
8: <%= f.text_field :name, "Store Name" %>
9: <%= f.text_field :address, "Store Address" %>
10: <%= f.file_field :image %>
11: <%= f.submit "Save", class: "btn btn-success" %>
我不知道为什么merge
被叫到这里。可能在一个隐藏的领域吗?我发现的与此错误相关的大多数答案都与隐藏字段有关。我正在使用地理编码器对 lat 进行地理编码,并在验证后很长时间内进行地理编码(不确定这是否相关):
class Vendor < ActiveRecord::Base
geocoded_by :address
after_validation :geocode,
:if => lambda{ |obj| obj.address_changed? }
end
这里的任何帮助都非常感谢!提前谢谢。
你应该这样写,因为你的第二个参数应该是一个选项哈希,它不应该是一个值。
<%= form_for @vendor, multipart: true do |f| %>
<%= f.text_field :name, :value => "Store Name" %>
<%= f.text_field :address, :value => "Store Address" %>
<%= f.file_field :image %>
<%= f.submit "Save", class: "btn btn-success" %>
<% end %>
尝试像下面这样更改表单
7: <%= form_for @vendor, :html => {:multipart => true} do |f| %>
8: <%= f.text_field :name %>
9: <%= f.text_field :address %>
10: <%= f.file_field :image %>
11: <%= f.submit "Save", class: "btn btn-success" %>
第二个参数是text_filed名称的一部分,在您的情况下会弄乱您的参数