如何在读写时将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 
+0

这将在读取上工作,但不在写入上。 – 2011-05-10 21:44:35

+0

更新,增加了一个值=方法也应该保存。它不适用于你的情况,因为行被认为是一个局部变量。你可以用self.lines解决问题。 – Roman 2011-05-10 21:53:36