设置虚拟属性 Rails 活动模型
Set Virtual Attribute Rails Active Model
如何在调用 Quote.new() 时设置虚拟属性来设置名字和姓氏?
before_save :assign_name 方法似乎不起作用。我收到一个错误
NoMethodError: undefined method `before_save' for Quote:Class
控制器:
quote = {name: "John Doe", City: "New York"}
Quote.new(quote)
型号:
class Quote
include ActiveModel::Model
before_save :assign_name
attr_accessor :name, :first, :last, :city
def assign_name
title_split = self.name.split(" / ")
self.first = title_split[0]
self.last = title_split[1]
end
end
你可以使用这样的东西
class Quote
include ActiveModel::Model
attr_accessor :name, :first, :last, :city
def initialize(attributes={})
super
assign_name(name)
end
def assign_name(name)
title_split = name.split(" / ")
self.first = title_split[0]
self.last = title_split[1]
end
end
还有 link 文档 here
before_save
在 ActiveRecord 中定义。您需要让您的 class 继承自 ActiveRecord::Base,如下所示:
class Quote < ActiveRecord::Base
end
如果你把方法放在 "before_save" 回调中,这意味着只有在执行 Quote#save 时才会调用该方法。例如,
quote = {name: "John Doe", City: "New York"}
q = Quote.new(quote)
q.save
如何在调用 Quote.new() 时设置虚拟属性来设置名字和姓氏?
before_save :assign_name 方法似乎不起作用。我收到一个错误
NoMethodError: undefined method `before_save' for Quote:Class
控制器:
quote = {name: "John Doe", City: "New York"}
Quote.new(quote)
型号:
class Quote
include ActiveModel::Model
before_save :assign_name
attr_accessor :name, :first, :last, :city
def assign_name
title_split = self.name.split(" / ")
self.first = title_split[0]
self.last = title_split[1]
end
end
你可以使用这样的东西
class Quote
include ActiveModel::Model
attr_accessor :name, :first, :last, :city
def initialize(attributes={})
super
assign_name(name)
end
def assign_name(name)
title_split = name.split(" / ")
self.first = title_split[0]
self.last = title_split[1]
end
end
还有 link 文档 here
before_save
在 ActiveRecord 中定义。您需要让您的 class 继承自 ActiveRecord::Base,如下所示:
class Quote < ActiveRecord::Base
end
如果你把方法放在 "before_save" 回调中,这意味着只有在执行 Quote#save 时才会调用该方法。例如,
quote = {name: "John Doe", City: "New York"}
q = Quote.new(quote)
q.save