如何在读写时将activerecord属性从字符串转换为has_many关系?
问题描述:
我期待能有一个ActiveRecord对象举办像这样:如何在读写时将activerecord属性从字符串转换为has_many关系?
class Job < ActiveRecord::Base has_many :lines def value ..concat lines together separated by \n end def value=(string) lines = string.split("\n").collect do |value| Line.new(:text =< value) end end end
,并想从与指向在一个文本框中有一个:值属性,能够调用Job.create (form_data)并在行表中创建行。同样,我希望文本框中填充来自值存取器的数据。有没有简单的方法来做到这一点?
答
像你描述的,如果你这样做只会工作:
在控制器:
@job = Job.find(params[:id])
鉴于:
form_for @job do |f|
f.label :value
f.textarea :value
end
,并在型号:
def value
lines.map(&:text).join("\n")
end
def value=(v)
lines.delete
v.split("\r?\n").each {|line| lines << Line.new(:text=>line)}
end
这将在读取上工作,但不在写入上。 – 2011-05-10 21:44:35
更新,增加了一个值=方法也应该保存。它不适用于你的情况,因为行被认为是一个局部变量。你可以用self.lines解决问题。 – Roman 2011-05-10 21:53:36