2013-08-20 97 views
0

在我的意见我有这样的代码:如何在Rails中预先填充长文本区域的文本区域?

<%= f.label :default_theme %> 
<%= f.text_area(:default_theme, :value => "How do we fill this with a long blob?") %> 

我想预填充文本区域,但拥有超过160线的XML的一个很长的斑点。做这个的最好方式是什么?我知道我可以把它作为一种价值来填充,但这似乎是一种非常可怕的方式。

+2

在你的控制器中,使用一个XML读取器来加载“long-message”,例如把它放到一个共享变量“@default_theme_content”中,然后为你的text_area调用它:'f.text_area(:default_theme ,:value => @default_theme_content)' – MrYoshiji

+0

啊我明白了。如果更喜欢在模型中而不是控制器中执行此操作? –

+0

@MrYoshiji我喜欢这样:) – David

回答

1

我认为你应该使用一个XML阅读器库加载长消息入共享变量@default_theme_content例如:

def index 
    @default_theme_content = MyXMLReader.read('path/to/xml/file.xml') 
    # etc. 

,然后在视图中使用它:

f.text_area(:default_theme, :value => @default_theme_content) 

您还问是否应该在模型中而不是Controller中。这取决于:

1):如果你的文件与模型,就像一个主题模式,应该被加载为用户的默认主题,那么是的,你可以在你的模型的方法返回本文件:

class Theme < ActiveRecord::Base 
    # etc. 

    def self.default_theme_content 
    MyXMLReader.read('path/to/xml/file.xml') 
    end 

并在控制器使用这样的:

def index 
    @default_theme_content = Theme.default_theme_content 
    # etc. 

2):如果这个文件不涉及任何模型,您可以委托这个控制器。