在formtastic中添加自定义输入字段?

时间:2011-07-28 09:34:33

标签: ruby-on-rails formtastic

我无法弄清楚,或找到一个非常简单的问题的任何解决方案: “我如何在formtastic中定义自己的输入字段?”

这就是我得到的:

<%= semantic_form_for @someFantasticVariable, :url => "/someFantasticUrl.html" do |f|%>  
    <%= f.inputs do %>
        <%= f.input :something_else_id, :required => true , :as => :select, :collection   => SomethingElse.find(:all), :label =>"The something else"%>
        <%= f.input :fantastic_max_cost, :label => "Budget (max cost)"%>  
    <%end%>


    <%= f.buttons do%>
        <%= f.commit_button :button_html => { :class => "primary", :disable_with =>     'Processing...', :id => "commitButton"}%>
    <%end%>
<%end%>

现在..

我想要一个非常简单的事情。我想要一个不属于该模型的字段。我想有一个日期字段,我可以用它来计算控制器中的一些东西。所以我想这样做:

<%= f.inputs do %>
    <%= f.input :something_else_id, :required => true , :as => :select, :collection   => SomethingElse.find(:all), :label =>"The something else"%>
    <%= f.input :fantastic_max_cost, :label => "Budget (max cost)"%>  
    <%= f.input :start_date, :as => :date , :label => "Start date"%>
<%end%>

但显然我不被允许,而且我无法通过我的谷歌搜索来找到任何方法。任何帮助/想法?

2 个答案:

答案 0 :(得分:5)

如果你的某些属性不属于你的模型,那么模型上应该存在一个getter和一个setter:

def start_date
end

def start_date=(arg)
end

然后,您可以在控制器上计算您的员工或任何您想要的人员:

...
puts params[:somefantasticvariable][:start_date]
...

但这是一个快速的形式化黑客攻击,你应该找到一些更好的方法,比如使用一些css的非形式输入等。

答案 1 :(得分:1)

Ruby提供了一个名为attr_accessor的无数据库构造。它相当于编写setter和getter方法。 Formtastic将看到此属性类似于数据库支持的属性。

@someFantasticVariable模型中:

attr_accessor :start_date

如果在@someFantasticVariable模型中使用attr_accessible,请务必同时添加start_date变量:

attr_accessible :start_date

由于该属性是无类型的,因此Formtastic无法派生要使用的HTML输入字段。您需要使用:as手动设置输入类型。以你的例子:

<%= f.input :start_date, :as => :date_select %>

引用: