目的是使用迁移将TestApp
模型的首选项存储到具有相同名称的MobileConfiguration
模型中。
以下是迁移:
TestApp.where.not(business_id: nil).each do |test_app|
configuration = MobileConfiguration.find_or_initialize_by(business_id: test_app.business_id)
MobileConfiguration::DISCLAIMERS.each { |disclaimer| test_app.public_send(disclaimer) }
configuration.max_store_distance_radius = test_app.max_store_distance_radius
configuration.save
end
MobileConfiguration::DISCLAIMERS.each { |disclaimer| test_app.public_send(disclaimer) }
应将test_app数据存储到mobile_configuration中。
DISCLAIMERS
是一个模型MobileConfiguration
的数组。
MobileConfiguration::DISCLAIMERS = [:app_disclaimer, :upgrade_disclaimer, :game_disclaimer]
:app_disclaimer, :upgrade_disclaimer, :game_disclaimer
是MobileConfiguration
模型
preferences(:configurations) do
preference_group "Disclaimer" do
string :app_disclaimer
string :game_disclaimer
string :upgrade_disclaimer
end
end
答案 0 :(得分:0)
将public_send与一个属性一起使用只调用该方法。您需要使用另一个属性将一些数据传递给方法。你还需要调用setter来传入数据。所以:
class Foo
attr_accessor :bar
end
foo = Foo.new
foo.public_send 'bar' # Just returns the current value of @bar - so nil.
foo.public_send 'bar=', 'something' # calls the setter and passes in 'something'
foo.public_send 'bar' # Now returns 'something'
答案 1 :(得分:0)
[MobileConfiguration::DISCLAIMERS].each do |property|
configuration.public_send("#{property}=",test_app.public_send(property))
end
可用于将值从一个模型复制到另一个模型以获取首选项。