如何在Rails模型中连接多个字段值

时间:2016-06-11 18:02:02

标签: ruby-on-rails ruby concat

这是我的表格

    <div class="field">
    <%= f.label :address_1 %><br>
    <%= f.text_field :address_1 %>
  </div>
  <div class="field">
    <%= f.label :address_2 %><br>
    <%= f.text_field :address_2 %>
  </div>
  <div class="field">
    <%= f.label :city %><br>
    <%= f.text_field :city %>
  </div>
  <div class="field">
    <%= f.label :state %><br>
    <%= f.text_field :state %>
  </div>
  <div class="field">
    <%= f.label :zip %><br>
    <%= f.text_field :zip %>
  </div>
  <div class="field">
    <%= f.label :country %><br>
    <%= f.text_field :country %>
  </div>

这就是我想要的输入值

:address_1 + :address_2 + :city + :state + :country

我尝试了以下但没有成功

"#{address_1} #{address_2} #{city} .etc"

我正在尝试加入输入值,以便在位置模型中进行更准确的地理编码

 class Location < ActiveRecord::Base
    geocoded_by :address_1 <--- should be the ":address_1 + :address_2 + :city + :state + :country" value
    after_validation :geocode

end

如何在模型中连接这些值以便这样使用? 感谢

2 个答案:

答案 0 :(得分:0)

在您的模型中,您可以编写类似 -

的方法
def full_address
  "#{self.address_1}, #{self.address_2}, #{self.city}"
end

然后,在您的控制器或视图中,您只需在模型的实例上应用此方法即可。在rails控制台中尝试此操作以查看结果。

user = User.first #assuming all your fields are stored inside user model
puts user.full_address

因此,您不需要再次保存整个地址。您可以随时调用full_address方法,甚至可以在视图中调用以获取完整地址。

答案 1 :(得分:0)

您可以通过以下方式实现

  1. 在模型中创建地址 - &gt;这是最好的方式
  2. 在控制器中创建地址 - &gt;这是好方法
  3. 模型中没有1的方式

    attr_accessor :address_1, :address_2, :city, :state, :country
    
     def before_save
        self.address = @address_1 + " " + @address_2 + " " + @city + " " + @state + " " + @country
     end
    in controller
    
    def save
       person = Person.new()
       person.address_1 = params[:address_1]
       person.address_2 = params[:address_2]
       person.city = params[:city]
       person.state = params[:state]
       person.country = params[:country]
       person.save
     end
    

    方式2例如模型人和控制器中的控制器人

    def save
       person = Person.new
       person.address = params[:address_1] + " "params[:address_2] + " " params[:city] + " " + params[:state] + " " + params[:country] 
       person.save
     end