Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 如何从rails模型中的其他字段生成字段_Ruby On Rails - Fatal编程技术网

Ruby on rails 如何从rails模型中的其他字段生成字段

Ruby on rails 如何从rails模型中的其他字段生成字段,ruby-on-rails,Ruby On Rails,我的地址分为@profile.street\u address,@profile.region,@profile.zip\u code 我想创造 @profile.address = "#{@profile.street_address} #{@profile.region} #{@profile.zip_code}" 每次创建或更新模型时,执行此操作的最佳方法是什么 您可以在保存回调之前设置 before_save do self.address = "#{street_address

我的地址分为
@profile.street\u address
@profile.region
@profile.zip\u code

我想创造

@profile.address = "#{@profile.street_address} #{@profile.region} #{@profile.zip_code}"

每次创建或更新模型时,执行此操作的最佳方法是什么

您可以在保存回调之前设置

before_save do 
  self.address = "#{street_address} #{region} #{zip_code}"
end
在您的address类中:

before_save :set_address

def set_address
  self.address = "#{profile.street_address} #{profile.region} #{profile.zip_code}"
end
这假设配置文件在您的模型中可用

将db作为实例方法进行规范化可能更好,如下所示:

def address
  "#{profile.street_address} #{profile.region} #{profile.zip_code}"
end

您最好在保存之前使用
,将所有属性组合到您想要的属性中(尽管在我看来这是一种糟糕的做法):

这不会将
地址
数据保存到数据库中,但会使您能够在控制器和视图中加载
@profile.address
。为什么这很重要?简单地说,因为当您调用
address
时,它将直接从数据库中的其他属性中提取,而不是从其他情况下的重复属性中提取

我个人会推荐这种方法,但两者都能达到你想要的效果

#app/models/profile.rb
class Profile < ActiveRecord::Base
   before_save :set_address
   private

   def set_address
      self.address = "#{street_address} #{region} #{zip_code}"
   end
end
#app/models/profile.rb
class Profile < ActiveRecord::Base
   def address
      "#{street_address} #{region} #{zip_code}"
   end
end