表单中的字段名称必须与RAILS 4中的模型属性名称匹配?

时间:2015-03-16 15:50:18

标签: ruby-on-rails forms activerecord

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列?

1 个答案:

答案 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