Rails是否始终使用表单中的name="example"
来映射模型属性名称?
这意味着表单字段上的name属性始终严格匹配ActiveRecord模型映射到的db列名称?
例如,在我的代码中
<%= form_for(@property, :url => landlord_properties_path(current_landlord),:html => {:class => 'form-horizontal'}) do |f| %>
<%= render 'shared/error_messages' , object: f.object %>
<div class="form-group selection property type">
<%= f.text_field :locality, 'name'=>"locality" %>
<%= f.text_field :country, 'name'=>"administrative_area_level_1" %>
<%= f.submit "add", class: "btn btn-s-md btn-success pull-right" %>
<% end %>
我的AR中有一个名为:locality的属性与我的db列名匹配:locality
我还有另一个名为:country的属性,但因为在表单中,名称被重写为'name'=>"administrative_area_level_1"
,似乎数据没有传递给AR
我正在覆盖该名称,因为我使用Geocomplete,这些名称字段用于进行谷歌地图api调用。 'name'=>"administrative_area_level_1"
在数据库中真的不方便。
这是我的属性
的强参数方法 def property_params
params.permit(:postal_code,:place_id,:country,:locality)
end
这当前不起作用,没有值传递到:country
如果我将:administrative_area_level_1
添加到params.permit,则rails抱怨
unknown attribute: administrative_area_level_1
我猜是因为我的数据库中没有它。
我有没有办法将name= administrative_area_level_1
字段映射到我的应用中的:country列?
答案 0 :(得分:4)
在模型中,您可以定义以下方法:
def administrative_area_level_1=(input)
self.country = input # Or do what ever you want with the input to map it to country
end